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