我编写了一个关于在单击文本后更改TextView背景的代码,但背景颜色没有改变,但其他TextView背景颜色发生了变化。我知道recyclerview是重用视图,因此我设置notifyItemchanged()
以避免重置视图。
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);
}
}
}
如果您需要更多我的代码,请告诉我。
答案 0 :(得分:2)
这不是一个经过验证的代码,但它会向您解释逻辑: -
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);
}
}
}
基本上你必须存储已在布尔数组中单击的位置,然后通过检查它是否已被点击在onbindview中设置颜色,因为recyclerview不按照你想的方式工作,它回收视图
答案 1 :(得分:0)
试试这个:
t1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
t1.setBackgroundColor(Color.parseColor("#455A64"));
}
});
希望它有所帮助。
答案 2 :(得分:0)
这可能对您有所帮助
copy&amp;粘贴方法onBindViewHolder
holder.t1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
t1.setBackgroundColor(ContextCompat.getColor(mContext, Color.parseColor("#455A64")););
}
});
答案 3 :(得分:0)
+1来@ankitagrawal。我认为这是正确的解决方案!
这是我的答案。 - 相同的逻辑但不同的方法。希望我做对了,因为我没有使用AS或eclipse。我刚刚修改了@ ankitagrawal的答案。谢谢:))
<强> http://pastebin.com/C7fqhhUa 强>