アイコン、テキスト、チェックボックスを持つ一連のアイテムを含む ListView があります。
リスト行のレイアウトは次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...>
<ImageView
android:id="@+id/list_icon"
... />
<CheckedTextView
android:id="@android:id/text1"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
... />
</LinearLayout>
リストは次を使用して入力されます。
ArrayList<HashMap<String, ?>> datalist = new ArrayList<HashMap<String, ?>>();
for (Item item : mItems) {
HashMap<String, Object> data = new HashMap<String, Object>();
data.put("info", item.info);
data.put("icon", item.icon);
datalist.add(data);
}
ListAdapter adapter = new SimpleAdapter(getContext(), datalist, R.layout.list_item,
new String[] { "info", "icon" }, new int[] { android.R.id.text1, R.id.list_icon });
list.setAdapter(adapter);
list.setItemsCanFocus(false);
list.setOnItemClickListener(this);
onItemClick ハンドラーは次のようになります。
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView ctv = (CheckedTextView) view.findViewById(android.R.id.text1);
if (ctv != null) {
ctv.setChecked(!ctv.isChecked());
}
}
アプリに 3 つのリスト項目を入力して最後の項目をクリックすると、Android 2.x デバイスでは最初の項目がチェックされ、もう一度クリックすると最後の項目がチェックされます。アイテムをクリックするたびにリストが再びいっぱいになり、順序が変わるようです。
配信された CheckedTextView がクリックしたアイテムの文字列を保持する実際のビューであることを onItemClick ハンドラーでチェックインしましたが、それでも別のアイテムがチェックされます。
ここで何が起こっているのか分かりますか?これは、アダプターの共有ビューが原因である可能性があると思います... (convertView)。もしそうなら、どうすればその問題を回避できますか?
前もって感謝します。