我目前正在尝试调整我的应用程序以使用“Android v4 兼容性库”,以便为 Android 1.6 用户提供使用片段的好处。
上下文菜单的实现似乎很棘手:
- 应用程序的主要活动是扩展FragmentActivity 类。
- 片段都基于一个扩展片段类的类。
- 片段类 在其onCreateView()方法 中调用registerForContextMenu()并覆盖onCreateContextMenu()和onContextItemSelected()方法。
对于onCreateContextMenu()这很有效。上下文菜单是从资源文件扩展而来的,并根据所选项目(基于 listView...即使片段不是 ListFragment)稍作修改。
选择上下文菜单项时会出现此问题。 从第一个添加的片段开始,对所有当前存在的片段调用onContextItemSelected() 。
在我的例子中,片段用于显示文件夹结构的内容。当打开子文件夹片段的上下文菜单并选择菜单项时,首先在上层调用onContextItemSelected()(取决于此时允许/可见的片段数量)。
现在,我通过活动级别的字段使用一种解决方法,该字段包含调用其onCreateContextMenu()的最后一个片段的标签。这样,当存储的标签与 getTag() 不同时,我可以在onContextItemSelected()的开头调用“return super.onContextItemSelected(item)”。但是这种方法对我来说看起来有点脏。
为什么在所有片段上调用 onContextItemSelected()?而不仅仅是一个调用onCreateContextMenu()的那个?
处理这个问题的最优雅的方法是什么?