Android上奇怪的ListView选择行为
Posted
技术标签:
【中文标题】Android上奇怪的ListView选择行为【英文标题】:Strange ListView selection behavior on Android 【发布时间】:2010-10-08 20:42:21 【问题描述】:有一个扩展ListActivity
的活动。
该列表由扩展 BaseAdapter
的自定义适配器备份。
getListView().setFocusable(true);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
我做了一个简单的(getSelectedItemPosition() == ListView.INVALID_POSITION)
签入onPrepareOptionsMenu()
以禁用需要选择项目的项目。
现在,启动活动后我要做的事情(动作发生 在模拟器下,ver.1.1)它的样子:
-
Hit menu - 菜单项被禁用 - OK
使用鼠标滚轮和点击菜单选择一个项目 - 项目启用
-好的
单击列表外的任意位置,重复 2)。物品没有收到
已启用 - WTF?
从头开始,点击 Del 并移动鼠标选择一个项目。这
结果与 3 相同。
为什么这些 (3, 4) 事情不断发生在我身上? :) TIA。
【问题讨论】:
【参考方案1】:将selectedItemPosition
依赖于ListView
可能是一种危险的方法。根据我的经验,如果列表失去焦点(通过单击其他内容),selectedItemPosition
将设置为 INVALID_POSITION
。
基本上,如果您的项目没有橙色“突出显示”的外观,请指望 selectedItemPosition
为空。
作为替代方案,您可能希望通过覆盖 onItemClick
和 onItemSelection
方法并保存所选项目的索引来记住所选项目,然后使用它来控制菜单选项的可用性。
【讨论】:
首先,感谢一流的书!喜欢它的清晰书写方式。至于 ListView,我 选择/突出显示了项目,但仍然没有(一致的)运气。在 Activity 启动后直接工作,但在执行完其他操作后不工作。感谢您提供另一种方式。以上是关于Android上奇怪的ListView选择行为的主要内容,如果未能解决你的问题,请参考以下文章
ListView BaseAdapter 中的 EditText 奇怪行为