有一个用于扩展ListFragment的自定义适配器。列表的每一行都是左侧的ImageView和右侧的TextView。单击图像时,ImageView应将其背景更改为不同的图像。我已经用这种方式实现了它:
public class MyAdapter extends BaseAdapter{
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// context.firstViewItem = position;
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.row_layout,
null);
viewHolder = new ViewHolder();
viewHolder.likeBtn = (ImageView)convertView.findViewById(R.id.likeBtn);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.likeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
view.setBackgroundResource(R.drawable.abc_btn_rating_star_on_mtrl_alpha);
}
});
}
return convertView;
}
}
但问题是,不仅此ImageView的背景发生了变化,而且列表视图的第三行或第四行中的每个图像视图都发生了变化。如何仅更改单击的imageview的背景?
答案 0 :(得分:0)
在 MainActivity :
中添加这样的代码 viewHolder.likeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(position==R.id.IMAGE_1){
view.setBackgroundResource(R.drawable.background_1);
}
else if(position==R.id.IMAGE_2){
view.setBackgroundResource(R.drawable.background_2);
}
}
});
此处 R.id.IMAGE_1 是xml文件中的ImageView ID。
答案 1 :(得分:0)
关于行元素的TAG可能存在问题,因此希望每次都使用viewholder实例
因为当滚动发生时,回收者会回收第一行 元素并显示新行。所以,在滚动场景中, 可以将onClickListener分派给特定的新排列的行 索引。
为避免这种情况,我们应该使用标记和视图持有者
public class MyAdapter extends BaseAdapter{
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// context.firstViewItem = position;
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.row_layout,
null);
viewHolder = new ViewHolder();
viewHolder.likeBtn = (ImageView)convertView.findViewById(R.id.likeBtn);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.likeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
viewHolder.likeBtn.setBackgroundResource(R.drawable.abc_btn_rating_star_on_mtrl_alpha);
// this should solve your problem
}
});
}
return convertView;
}
}