4

我试图更好地理解 ListView 的内部功能,因为它与选择一个或多个项目有关——实际上,我什至很难理解到这一点,这真是令人惊讶。

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

更根本的是,这里的底层 ListView 机制是什么?行视图的默认 onClick 是然后调用 ListView 的 onItemClick/LongClick 处理程序,或者此单击处理如何排序?

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

以下是有关我的应用程序的更详细上下文


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

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

我的应用结构是:

  • Activity 是 ListActivity 的扩展
  • Adapter 是 ArrayAdapter<> 的扩展
  • ListView 行布局是完全自定义的布局(不是任何类型的内置 ListView 行布局)

我对 ListView 的内置功能的理解使我达到了现在的地步

  • 将choiceMode设置为multipleChoice
  • 使用 ListView 'checked' 功能进行和跟踪选择
  • 使用自定义选择器作为“activatedBackgroundIndicator”来显示突出显示(此处为示例
4

1 回答 1

1

保留一个 ArrayList 以保持 ListView 项目被选中的位置。When a ListView item is selected check in that ArrayList whether item position is in ArrayList or not. 如果项目不在 ArrayList 中,则将 Item 的状态更改为选中,否则将状态更改为未选中并从 ArrayList 中删除位置对象。这对我有用。

于 2013-10-01T07:20:54.947 回答