我有一个 ListActivty
, ListView 选择模式设置为 CHOICE_MODE_SINGLE
项目布局仅包含一个 CheckedTextView
。默认情况下,当显示 Activity 时,所有项目都未选中。如果用户点击一个项目,它会自动被选中并显示复选标记。单击另一个项目将取消选中前一个项目。所有这些都是开箱即用的。
我想做的是取消选中用户点击已选中项目的项目。我已经覆盖了 onListItemClick
方法来检测该项目是否已经被选中并取消选中,如下所示:
@Override
protected void onListItemClick(ListView listView, View view, int position, long id) {
CheckedTextView checkedTextView = (CheckedTextView) view;
if (checkedTextView.isChecked()) {
listView.setItemChecked(position, false);
}
}
问题是在 Android 4.4 上,checkedTextView.isChecked()
总是返回 true:如果我点击一个未选中的项目,它返回 true,点击选中的项目也返回 true。我试过 listview.isItemChecked(position)
但它的工作方式相同。
有没有其他方法可以检测到我点击了选中的项目,以便我可以取消选中它?
最佳答案
KitKat AbsListView
在处理点击后通知监听器,因此当您在监听器中调用 checkedTextView.isChecked()
时它已经被检查。
尝试创建覆盖 performItemClick()
的自定义 ListView,在 super 调用之前保存项目状态,然后像这样(未经测试)对其进行操作:
@Override
public boolean performItemClick(View view, int position, long id) {
boolean checkedBeforeClick = isItemChecked(position);
super.performItemClick(view, position, id);
if (checkedBeforeClick) {
setItemChecked(position, false);
}
}
关于android - 单击项目时取消选中项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24249670/