android - 单击后textview背景不变

标签 android android-recyclerview

我写了一段关于在点击文本后改变 TextView 背景的代码,但是背景颜色没有改变,但是另一个 TextView 背景颜色改变了。我理解 recyclerview 是为了重用 View ,所以我设置了 notifyItemchanged() 以避免它重置 View 。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{

    private List<String> innertext;
    private Context mContext;

    public MyAdapter(List<String> items,Context context){
        this.innertext = items;
        this.mContext = context;
    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.background_color, parent, false);
        MyViewHolder holder = new MyViewHolder(v);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        String s = innertext.get(position);
        holder.t1.setText(s);

    }

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


    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        public TextView t1;

        public MyViewHolder(View itemView) {
            super(itemView);
            t1 = (TextView)itemView.findViewById(R.id.t1);
            t1.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            int pos = getAdapterPosition();

            t1.setBackgroundColor(Color.parseColor("#455A64"));
            notifyItemChanged(pos);
        }

    }
}

如果您需要我提供更多代码,请告诉我。

最佳答案

这不是经过验证的代码,但它会向您解释逻辑:-

public class MyAdapter extends RecyclerView.Adapter {
private List<String> innertext;
private Context mContext;
private boolean[] checked={false};

public MyAdapter(List<String> items, Context context) {
    this.innertext = items;
    this.mContext = context;
    checked = new boolean[items.size()];
}


@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.background_color, parent, false);
    MyViewHolder holder = new MyViewHolder(v);
    return holder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    String s = innertext.get(position);
    ((MyViewHolder)holder).t1.setText(s);
    if(checked[position]){
        ((MyViewHolder)holder).t1.setBackgroundColor(Color.parseColor("#455A64"));
    }
}


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


class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView t1;

    public MyViewHolder(View itemView) {
        super(itemView);
        t1 = (TextView) itemView.findViewById(R.id.t1);
        t1.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int pos = getAdapterPosition();
        checked[pos] = true;
        notifyItemChanged(pos);
    }

}

基本上你必须将被点击的位置存储在一个 bool 数组中,然后通过检查它是否被点击来在 onbindview 中设置颜色,因为 recyclerview 并不像你想象的那样工作,它回收 View

关于android - 单击后textview背景不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35037790/

相关文章:

android - 图像在滑动缩放时失真

android - NotifyItemRemoved 抛出异常

java - fragment 管理器 : No view found for id

android - 使用数据绑定(bind)突出显示选定的 recyclerview 行

android - 使用 Appium 和 WebdriverIO 测试移动应用程序 : "No route found for/session"

android - 如何在 Android 中同时录制 2 个麦克风?

java - 从 Java 中的 Android 应用程序执行 Python 脚本?

java - 安卓房间: error: setValue(T) has protected access in LiveData

android - 应用程序启动时应用程序类不运行?

android - 将从图像选择器中选取的图像添加到回收器 View 、Android Studio、Kotlin