アイテムのリストを表示するListActivityがあり、各アイテムの右端にImageViewがあり、最初に矢印アイコンが表示されています。特定のボタンを押した後、それらの矢印アイコンを削除アイコンに置き換えたいと思います。このためにListViewのArrayAdapterを変更し、notifyDataSetChanged()を呼び出しました。ArrayAdapterのgetViewメソッドで、ImageViewのImageResourceを設定しましたが、変更がリストに表示されないのは、最初のエントリのみが変更されたアイコンです。
ArrayAdapterのコードは次のとおりです。
private class CCAdapter extends ArrayAdapter<CCcenter>{
ArrayList<CCcenter> items;
int mode;
public CCAdapter(Context context, int textViewResourceId, ArrayList<CCcenter> Items,int m) {
super(context, textViewResourceId, Items);
this.items=Items;
this.mode=m;
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.lisitem, null);
}
final CCcenter o = items.get(position);
if (o != null) {
TextView title = (TextView) v.findViewById(R.id.ttl_txt);
TextView desc=(TextView)v.findViewById(R.id.desc_txt);
TextView dist=(TextView)v.findViewById(R.id.dist_txt);
ImageView icon=(ImageView)findViewById(R.id.lst_icon);
RatingBar rating=(RatingBar)findViewById(R.id.lst_ratings);
if(title!=null)
{
title.setText(o.title);
}
if(desc!=null)
{
desc.setText(o.desc);
}
if(dist!=null)
{
dist.setText(o.dist);
}
if(rating!=null)
{
rating.setRating(o.rating);
}
if(icon!=null) //edit mode
{
if(this.mode==1)
{
icon.setImageResource(R.drawable.arrow);
}
else
{
icon.setImageResource(R.drawable.dlet);
}
}
}
return v;
}
}
ボタンのOnClickメソッドで、次のことを行います。
CCAdapter mAdapter=new CCAdapter(context, R.layout.lisitem, CCS,2);
MyList.this.setListAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
MyList.this.getListView().invalidateViews();
しかし、これを行った後、リストの最初のエントリにのみ削除アイコンが表示され、他のエントリにはデフォルトの矢印アイコンが表示されます。何が間違っているのでしょうか。