Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 在RecyclerView中更改单个drawable的颜色将更改所有drawable大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我只是试图根据一个值改变我的行内部drawable的颜色,但是不是一个drawable,适配器改变了所有这些颜色.

这是我的适配器:

public class ReportAdapter extends RecyclerView.Adapter<ReportAdapter.ReportViewHolder> {

    DataBaseHelper dataBase;

    private LayoutInflater inflater;
    List<ChoosedSubject> data = Collections.emptyList();
    Context context;
    OnItemClickListener itemClickListener;

    public ReportAdapter(Context context,List<ChoosedSubject> data,OnItemClickListener itemClickListener) {
        inflater = LayoutInflater.from(context);
        this.data = data;
        this.context = context;
        this.itemClickListener = itemClickListener;
    }

    @Override
    public ReportViewHolder onCreateViewHolder(ViewGroup parent,int viewTypE) {
        View view = inflater.inflate(R.layout.report_cell,parent,falsE);
        ReportViewHolder holder = new ReportViewHolder(view);

        dataBase = new DataBaseHelper(context);

        return holder;
    }

    //Set Data inside RecyclerView
    @Override
    public void onBindViewHolder(ReportViewHolder holder,int position) {
        ChoosedSubject current = data.get(position);
        Grades grades = new Grades(context);

        resources resources = context.getresources();
        int iconColor;
        Drawable icon;

        icon = ContextCompat.getDrawable(context,dataBase.getSpecificChoosedSubjectAppendingToName(current.getName()).get(0).getChooseDicon());

        if (dataBase.getSpecificChoosedSubjectAppendingToName(current.getName()).get(0).getChooseDicon() != R.drawable.subject_default) {
            iconColor = resources.getColor(dataBase.getSpecificChoosedSubjectAppendingToName(current.getName()).get(0).getChoosedColor());
            icon.setColorFilter(iconColor,PorterDuff.Mode.SRC_IN);
            holder.icon.setBACkground(icon);
        } else {
            holder.icon.setImageresource(R.drawable.subject_default);
        }

        holder.subject.setText(current.getName().toString());

        numberFormat formatter = numberFormat.getnumberInstance();
        formatter.setMinimumFractionDigits(0);
        formatter.setMaximumFractionDigits(0);
        String output = formatter.format(dataBase.getSpecificChoosedSubjectAppendingToName(current.getName()).get(0).getAverage());

        int formattedValue = Integer.valueOf(output);


        //CHANGING COLOR DEPENDING ON VALUE
        int @R_301_2492@Color = 0;
        Drawable @R_301_2492@ = ContextCompat.getDrawable(context,R.drawable.mark@R_301_2492@);
        Drawable @R_301_2492@Border = ContextCompat.getDrawable(context,R.drawable.mark@R_301_2492@_border);

        if (formattedValue >= 10) {
            @R_301_2492@Color = resources.getColor(R.color.positivE);
        } else if (formattedValue >= 4 && formattedValue <= 9) {
            @R_301_2492@Color = resources.getColor(R.color.neutral);
        } else if (formattedValue < 4) {
            @R_301_2492@Color = resources.getColor(R.color.negativE);

        }

        @R_301_2492@.setAlpha(204);
        @R_301_2492@.setColorFilter(@R_301_2492@Color,PorterDuff.Mode.SRC_IN);
        @R_301_2492@Border.setColorFilter(@R_301_2492@Color,PorterDuff.Mode.SRC_IN);

        holder.mark@R_301_2492@.setImageDrawable(@R_301_2492@);
        holder.mark@R_301_2492@Border.setImageDrawable(@R_301_2492@Border);


        holder.average.setText(output);
        holder.average.setTypeface(EasyFonts.robotoBlack(context));
    }

    @Override
    public int getItemCount() {
        return data.size();
    }


    public class ReportViewHolder extends RecyclerView.ViewHolder implements View.onClickListener {

        TextView subject;
        ImageView icon;
        ImageView mark@R_301_2492@;
        ImageView mark@R_301_2492@Border;
        TextView average;

        public ReportViewHolder(View itemView) {
            super(itemView);
            subject = (TextView) itemView.findViewById(R.id.report_subject);
            icon = (ImageView) itemView.findViewById(R.id.report_icon);
            mark@R_301_2492@ = (ImageView) itemView.findViewById(R.id.report_mark@R_301_2492@);
            mark@R_301_2492@Border = (ImageView) itemView.findViewById(R.id.report_mark@R_301_2492@_border);
            average = (TextView) itemView.findViewById(R.id.report_averagE);

            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            itemClicklistener.onItemClick(v,this.getAdapterPosition());
        }

    }

}

知道怎么做?谢谢您的帮助!!!

解决方法

这是一种缓存.从 Android docs

Drawable.mutate()创建后解决问题.

像这样的东西:

Drawable @R_301_2492@ = ContextCompat.getDrawable(context,R.drawable.mark@R_301_2492@).mutate();
Drawable @R_301_2492@Border = ContextCompat.getDrawable(context,R.drawable.mark@R_301_2492@_border).mutate();

大佬总结

以上是大佬教程为你收集整理的android – 在RecyclerView中更改单个drawable的颜色将更改所有drawable全部内容,希望文章能够帮你解决android – 在RecyclerView中更改单个drawable的颜色将更改所有drawable所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。