覆盖Android ListView onItemClick导致选择项目(选中)

时间:2013-09-16 21:18:50

标签: android listview android-listview

我正在努力更好地理解ListView的内部功能,因为它涉及选择一个或多个项目 - 实际上令人惊讶的是,在我的理解中,这对我来说是多么困难。

默认情况下,定期单击ListView项目会将该项目的“已检查”状态设置为true。 如何覆盖此行为,以便不会进行此选择?

更基本的是,这里的基础ListView机制是什么?行视图的默认值是onClick然后调用ListView的onItemClick / LongClick处理程序,或者这个点击处理是如何排序的?

我确实想要允许multipleChoice的choiceMode,但我只想在onItemLongClick上选择它。 覆盖onItemClick不会改变此行为,并且在适配器getView()函数中覆盖行视图的onClick处理程序似乎会阻止ListView onItemClick和onItemLongClick发生。

以下是我的申请中更详细的背景


我的目标是让我的ListActivity显示一个ListView,其功能如下:

  • 单击某个项目会执行非选择操作(展开行以显示更多信息)
  • 长按一个项目会选择它。通过突出显示行的背景(如在Gmail应用中)
  • 来指示选择项目
  • 您可以选择多个项目

我的申请结构是:

  • 活动是ListActivity的扩展
  • 适配器是ArrayAdapter<>
  • 的扩展
  • ListView行布局完全是自定义布局(不是任何内置的ListView行布局)

我对ListView的内置功能的理解让我到了

的地步
  • 将choiceMode设置为multipleChoice
  • 使用ListView'选中'功能制作和跟踪选择
  • 使用自定义选择器作为'activatedBackgroundIndicator'来显示突出显示(example here

1 个答案:

答案 0 :(得分:1)

保持ArrayList维护ListView项目的选定位置。选择ListView项时,检查该ArrayList是否项目位置在ArrayList中。如果item不在ArrayList中,则将Item的状态更改为checked,否则将状态更改为unchecked,并从ArrayList中删除position对象。这对我有用。