我写了一段关于在点击文本后改变 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/