android - 单击项目时取消选中项目

标签 android android-layout android-listview android-4.4-kitkat checkedtextview

我有一个 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/

相关文章:

android - 如何在 Android Studio 中运行不同的产品风格

java - 以编程方式完成时, View 不反射(reflect)任何更改

android - Android 的选项卡式可分页 ActionBar 主导航上的哪个子导航模式?

java - 如何在 Android 中填充 ListFragment?

android - 是否可以在 ListView 中的项目位置显示上下文菜单?

Android:背景图片大小

android - 为什么gradle的构建无法完成?

android - 是否可以在 Android 中触摸模糊部分图像?

android - 生成的 ListView 应用程序的 Intent 停止工作

java - 错误:(12) No resource identifier found for attribute 'el_headerLayout' in package