安卓上ListView的选择行为异常

3

有一个继承了ListActivity的活动。 该列表由一个继承了BaseAdapter的自定义适配器支持。

getListView().setFocusable(true);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

onPrepareOptionsMenu()中,我进行了一个简单的检查(getSelectedItemPosition() == ListView.INVALID_POSITION)来禁用需要选择项目的项目。
现在,在启动活动后(该操作发生在模拟器下,版本为1.1),它是什么样子的:
  1. 点击菜单 - 菜单项被禁用 - OK
  2. 使用鼠标滚轮选择一个项目并点击菜单 - 项目已启用 - OK
  3. 在列表外单击任意位置,重复步骤2。项目不会被启用 - WTF?
  4. 从头开始,按Del键并移动鼠标选择一个项目。结果与3相同。
为什么这些事情(3,4)一直发生在我身上呢? :) TIA.
1个回答

4
依赖于ListView上的selectedItemPosition可能是一种危险的方法。在我的经验中,如果List失去焦点(通过点击其他内容),selectedItemPosition将被设置为INVALID_POSITION。
基本上,如果你的项目没有那个橙色的“高亮”外观,就指望selectedItemPosition为空。
作为替代方案,您可以通过覆盖onItemClick和onItemSelection方法并保存所选项目的索引来记住所选项目,然后使用它来控制您的菜单选项可用性。

1
首先,感谢这本一流的书!喜欢它清晰易懂的写作方式。 至于ListView,我已经选择/突出显示了项目,但仍然没有(一致的)运气。在Activity启动后立即工作,但在执行其他操作后不起作用。 感谢提供替代方法。 - yanchenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接