これはすでに多くの時間が尋ねられています。しかし、私はそれを成功裏に実装することはできません多くのソリューションを試した後。リストアイテム更新のListViewアダプタonClickListener
私はいくつかのView
を含むカスタムレイアウトのリストを作成しています。ビューの1つは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ので、それがランダム行で多くのimageviewsのアイコンを変更します。私はviewHolderのためにそのことを知っています。しかし、これをどうすれば正しく行うことができますか?
また、私は使用していた: -
imgViewArray [位置] = holder.textView1。 "onListItemClickListener"内には、
があります。これを実行すると、その位置のアイコンが必要に応じて変更されますが、スクロールして再びその行に戻った後、再びデフォルトのアイコンに変更されます。私はこれが行がリサイクルされるためだと知っています。
あなたのコードで述べたように変更に関するアダプタnotify' 'その後、位置を更新するために、データセットから位置を使用してください:あなたは、あなたの
CustomObject
でのようなものを項目の位置を保存する必要があります。 – codeFreak