Android 版本:3.1
API 版本:Android 2.2
设备:Motorola MX604。
我动态创建了一个多选的 CheckedTextView 列表,然后将 OnItemClickListener 附加到 ListView 上。在监听器的 onItemClick 方法中,我调用 CheckedTextView 的 isChecked 方法来确定关联的复选框是否被选中或取消选中。很简单。
问题是:当我选择一个之前未选择的项目时,isChecked 方法返回 false。当我选择一个之前已选择的项目时,该方法返回 true。复选框图标本身正确地勾选和取消勾选。
以下是 CheckedTextView 的布局:
API 版本:Android 2.2
设备:Motorola MX604。
我动态创建了一个多选的 CheckedTextView 列表,然后将 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
我进行了广泛的搜索,只找到了另一份类似行为的报告。这让我相信问题可能出现在我的代码中,而不是Android类中。我还研究了许多设置类似的例子。有人能发现问题吗?
谢谢
PS:这是我在任何论坛上的第一篇帖子,如果我漏掉了对这篇文章读者有帮助的信息,请告诉我。
isChecked()
相反的返回值? - John Leehey