【发布时间】:2018-04-18 20:58:45
【问题描述】:
我知道这已经被问过很多次了。但是在尝试了许多解决方案后,我无法成功实施。
我正在制作一个包含多个Views 的自定义布局列表。其中一个视图是ImageView,我希望它在用户单击它时更改其图标。
我使用的ListAdapter类如下:
public class PetitionListAdapter extends BaseAdapter {
ViewHolder holder = null;
private LayoutInflater inflater;
private ArrayList<CustomObject> objects;
private class ViewHolder {
ImageView ivsign;
}
public PetitionListAdapter(Context context, ArrayList<CustomObject> objects) {
inflater = LayoutInflater.from(context);
this.objects = objects;
}
public int getCount() {
return objects.size();
}
public CustomObject getItem(int position) {
return objects.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.petition_list_layout_beta, null);
holder.ivsign = convertView.findViewById(R.id.ivsign);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.ivsign.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView img = v.findViewById(R.id.ivsign);
img.setImageResource(R.drawable.icon_after_click);
}
});
return convertView;
}
}
这样做,clickListener 可以工作,但不是那个特定的 imageview,而是随机更改许多 imageview 的图标。我知道它是因为 viewHolder。但是我怎样才能正确地做到这一点呢?
我也用过:-
imgViewArray[位置] = holder.textView1;
在“onListItemClickListener”内。这样做会根据需要更改该位置的图标,但是在滚动并再次返回该行后,它再次更改为默认图标。我知道这是因为那一行被回收了。
【问题讨论】:
-
使用您在代码中提到的数据集中的位置更新位置,然后
notify适配器了解更改。
标签: android listview onclicklistener android-viewholder