【发布时间】:2011-07-14 22:43:22
【问题描述】:
我目前正在尝试调整我的应用程序以使用“Android v4 兼容性库”,以便为 Android 1.6 用户提供使用片段的好处。
上下文菜单的实现似乎很棘手:
- 应用程序的主要活动 正在扩展 FragmentActivity 类。
- 片段都基于一个 扩展 Fragment 类的类。
- 片段类正在调用 registerForContextMenu() 在其 onCreateView() 方法中并覆盖这些方法 onCreateContextMenu() 和 onContextItemSelected()。
对于 onCreateContextMenu(),这非常有效。上下文菜单是从资源文件扩展而来的,并根据所选项目进行了轻微修改(基于 listView...即使片段不是 ListFragment)。
选择上下文菜单条目时会出现此问题。 onContextItemSelected() 为所有当前存在的片段调用,从第一个添加的片段开始。
在我的例子中,片段用于显示文件夹结构的内容。当打开子文件夹片段的上下文菜单并选择菜单项时,首先在上层调用 onContextItemSelected()(取决于此时允许/可见的片段数)。
现在,我通过活动级别的字段使用一种解决方法,该字段包含调用其 onCreateContextMenu() 的最后一个片段的标签。这样,当存储的标签与 getTag() 不同时,我可以在 onContextItemSelected() 的开头调用“return super.onContextItemSelected(item)”。 但是这种方法对我来说有点脏。
为什么在所有片段上都调用 onContextItemSelected()?而不仅仅是调用 onCreateContextMenu() 的那个?
处理这个问题最优雅的方法是什么?
【问题讨论】:
-
感谢您的工作。我今晚遇到了这个确切的问题,不幸的是找不到任何其他解决方案。但是,由于您的信息,我至少向前迈进了。 :)
-
我昨天遇到了完全相同的问题。当我发现这篇文章时,我刚刚弄清楚了问题的范围。我想不出另一种临时解决方法,但如果我想到它,我会发布一个。
-
知道了。 github.com/JakeWharton/ActionBarSherlock/issues/56 将尝试对所选项目使用唯一 ID 并通过它进行过滤。
-
其实比这更简单。改变返回真;返回 super.onContextItemSelected(item);在我的 onContextItemSelected() 覆盖中,一切都开始工作了。
标签: android contextmenu android-fragments android-support-library