2009-02-20 132 views
2

得到了一个扩展为ListActivity的活动。 该列表由延伸到BaseAdapter的自定义适配器进行备份。Android上的奇怪ListView选择行为

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

我做onPrepareOptionsMenu()简单(getSelectedItemPosition() == ListView.INVALID_POSITION)检查禁用要求的项目要选择的项目。现在

,是我发起活动结束后做(行动发生 下模拟器,1.1版)的是什么样子:

  1. 命中菜单 - 菜单项将被禁用 - 确定
  2. 用鼠标滚轮选择项目并点击菜单 - 项目启用 -OK
  3. 点击列表外的任何地方,重复2)。这些项目没有得到 启用 - WTF?
  4. 从零开始,选择一个项目打Del和移动鼠标。该 结果是一样的3

为什么这些(3,4)的东西保持发生在我身上? :) TIA。

回答

4

依靠selectedItemPosition上的ListView可能是一种危险的方法。根据我的经验,如果列表失去焦点(通过点击其他)selectedItemPosition设置为INVALID_POSITION

基本上,如果您的物品没有橙色'突出显示'看起来它,计数selectedItemPosition为空。

作为一种替代方案,您可能希望通过覆盖onItemClickonItemSelection方法并保存所选项目的索引来记住所选项目,然后使用它来控制菜单选项的可用性。

+1

首先,感谢您的顶尖书!喜欢它写入的明确方式。 至于ListView,我_have_选中/突出显示的项目,仍然没有(一致)运气。在活动开始后直接工作,但在执行完其他工作后不能工作。 感谢您的替代方法。 – yanchenko 2009-02-21 02:54:34