【发布时间】:2017-07-01 07:25:09
【问题描述】:
我有一个 recyclerview,它显示了几个 (8) 卡片视图。在每个卡片视图中,有几个元素,如文本、图像按钮等。在适配器类(RvAdapter 扩展 RecyclerView.Adapter)中,我有如下代码。我想要做的是使用同一按钮的 OnClickListener 更改分配给 imagebutton 的 Vector (.xml) 的颜色。
public RvAdapter(Context context,List<Person> persons) {
this.mContext=context;
this.persons=persons;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_content,parent,false);
ViewHolder vh=new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
final ViewHolder mHolder=holder;
mHolder.personName.setText(persons.get(position).name);
mHolder.personAge.setText(( persons.get(position).age));
mHolder.cvCard.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext,"card number:"+String.valueOf(position),Toast.LENGTH_SHORT).show();
}
});
//this is where the error comes
mHolder.alarmImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//this code line doesnt work
//mHolder.alarmImageButton.setColorFilter(R.color.colorAccent);
//this code line works... but it changes the imagebutton color of another card view at below of the recycler view
mHolder.alarmImageButton.setColorFilter(Color.argb(255,255,255,255));
Toast.makeText(mContext,"button:"+String.valueOf(position),Toast.LENGTH_SHORT).show();
}
});
}
RecyclerView 里面有 8 个卡片视图。当第一个cardview的imagebutton的imagebutton被点击时,颜色变为白色。但错误是它也改变了第 7 张卡片的图像按钮颜色的颜色。当第二张卡片视图的图像按钮被点击时,它也会改变第八张卡片的图像按钮颜色。但是,吐司工作正常。它表明点击事件已经正确识别了每个cardview和imagebutton的位置。
我只是无法正确解决这个问题。第一张牌第七张牌的观点是如何相互联系的?
这是我的 ViewHolder 类
public class ViewHolder extends RecyclerView.ViewHolder{
CardView cvCard;
TextView personName;
TextView personAge;
ImageButton alarmImageButton;
public ViewHolder(View itemView) {
super(itemView);
cvCard=(CardView)itemView.findViewById(R.id.cv_card);
personName=(TextView)itemView.findViewById(R.id.txt_person_name);
personAge=(TextView)itemView.findViewById(R.id.txt_person_age);
alarmImageButton=(ImageButton)itemView.findViewById(R.id.alarm_image_button);
}
如果有人能帮我找到这个错误,那将是一个很大的帮助......
【问题讨论】:
标签: android onclicklistener android-recyclerview