私のアプリは現在Android1.6を対象としています。これには、 CHOICE_MODE_SINGLEを含むListViewが含まれています。すべてのアイテムはCheckableを実装しています。setItemChecked (int position、boolean value)を使用して、必要に応じてアイテムをチェック/チェック解除しています。Android 2.1、2.2、2.3で期待どおりに動作します。ただし、Android 1.6では、アイテムはチェックされません。
コードは次のようになります。
Integer checkedIndex = 0; // This is actually set from somewhere else.
void updateCheckedItem() {
int count = adapter.getCount();
for (int i = 0; i < count; i++) {
listView.setItemChecked(i, isChecked(i));
}
// Here, we should have a checked item (unless checkedIndex was null)
SparseBooleanArray checkedPositions = listView.getCheckedItemPositions();
int size = checkedPositions.size();
// On Android 1.6, size is 0 (wrong)
// On Android 2.x, size is 1 (correct)
// Another try...
int checkedPosition = listView.getCheckedItemPosition();
// On Android 1.6, checkedPosition is INVALID_POSITION (-1), meaning nothing is checked (wrong)
// On Android 2.x, checkedPosition is whatever checkedIndex is (correct)
}
boolean isChecked(int position) {
return checkedIndex != null && checkedIndex == position;
}
この質問は、ListViewのChoideModeをXMLではなくコードで設定することで問題を解決しました。私はそもそもそれをコードで行い、それをXMLに入れても何の違いもありませんでした。それでも問題は発生します。
これをAndroid1.6で機能させるにはどうすればよいですか?