在列表视图中更改单击的imageview背景

时间:2015-04-06 10:46:59

标签: android android-listview listadapter

有一个用于扩展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的背景?

2 个答案:

答案 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;
    }
}