Android バージョン: 3.1
API バージョン: Android 2.2
デバイス: Motorola MX604
CheckedTextView アイテムの複数選択 ListView を動的に作成し、OnItemClickListener を ListView にアタッチします。リスナーの onItemClick メソッドで、CheckedTextView の isChecked メソッドを呼び出して、関連するチェックボックスがオンかオフかを判断します。十分に単純です。
問題: 以前に選択されていない項目を選択すると、isChecked メソッドが false を返します。以前に選択した項目を選択すると、メソッドは true を返します。チェックボックス アイコン自体が正しくチェックおよびチェック解除されます。
CheckedTextView のレイアウトは次のとおりです。
<CheckedTextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center_vertical"
android:drawableLeft="?android:attr/listChoiceIndicatorMultiple"
android:paddingLeft="6dip" android:paddingRight="6dip"
/>
これは、ListView を作成する方法です。
private void createSortedChannelList() {
emptyViewContainer();
ListView sortedListView = new ListView(this);
sortedListView.setId(CHANNEL_LISTVIEW_ID);
sortedListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
sortedListView.setItemsCanFocus(false);
sortedListView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
CheckedTextView selectedItem = (CheckedTextView) view;
boolean isChecked = selectedItem.isChecked();
Log.e(mLogTag,"item clicked position = " + position + " isChecked = " + isChecked);
}
});
ArrayAdapter<Channel> listAdapter =
new ArrayAdapter<Channel>(this,R.layout.favorite_channel_list_select_channel_row,mAllChannels);
sortedListView.setAdapter(listAdapter);
for(int channelIndex = 0;channelIndex < mChannelIds.length;channelIndex++){
if(mSelectedChannelIds.contains(mChannelIds[channelIndex]))
sortedListView.setItemChecked(channelIndex, true);
}
addViewToViewContainer(sortedListView);
}
これは、以前に選択されていない項目を選択したときに生成されるログ出力です。
09-23 09:08:59.650: item clicked position = 19 isChecked = false
そして、以前に選択したアイテムを選択すると
09-23 09:10:20.800: item clicked position = 18 isChecked = true
広範な検索を行いましたが、同様の動作に関する報告は他に 1 つしか見つかりません。これにより、問題はおそらくAndroidクラスではなく、私のコードにあると思われます:p 同様の方法で設定された多数の例も見ました。誰でも問題を見つけることができますか?
ありがとう
PS これはどのフォーラムでも初めての投稿です。この投稿の読者に役立つ情報が不足している場合は、お知らせください。