gpt4 book ai didi

android - 如何在多 fragment Activity 中处理 onContextItemSelected?

转载 作者:IT老高 更新时间:2023-10-28 13:15:56 24 4
gpt4 key购买 nike

我目前正在尝试调整我的应用程序以使用“Android v4 兼容性库”,以便为 Android 1.6 用户提供使用 fragment 的好处。

上下文菜单的实现似乎很棘手:

  • 应用的主要 Activity 正在扩展 FragmentActivity类。
  • fragment 都基于一个扩展 Fragment 类的类。
  • fragment 类正在调用registerForContextMenu() 在其 onCreateView() 方法中并覆盖这些方法onCreateContextMenu()onContextItemSelected()

对于 onCreateContextMenu() 这很有效。上下文菜单是从资源文件扩展而来的,并根据所选项目进行了轻微修改(基于 listView...即使 fragment 不是 ListFragment)。

选择上下文菜单条目时会出现此问题。onContextItemSelected() 为所有当前存在的 fragment 调用,从第一个添加的 fragment 开始。

在我的例子中, fragment 用于显示文件夹结构的内容。当打开子文件夹 fragment 的上下文菜单并选择菜单项时,首先在上层调用 onContextItemSelected()(取决于此时允许/可见的 fragment 数)。

现在,我通过 Activity 级别的字段使用一种解决方法,该字段包含调用其 onCreateContextMenu() 的最后一个 fragment 的标签。这样,当存储的标签与 getTag() 不同时,我可以在 onContextItemSelected() 的开头调用“return super.onContextItemSelected(item)”。但是这种方法对我来说有点脏。

为什么在所有 fragment 上都调用 onContextItemSelected()?而不仅仅是调用 onCreateContextMenu() 的那个?

处理这个问题最优雅的方法是什么?

最佳答案

即使您找到了解决方法,我也会发布答案,因为我刚刚处理了类似的问题。当您为特定 fragment 扩展上下文菜单时,为每个菜单项分配一个对 fragment 唯一的 groupId。然后测试“onContextItemSelected”中的 groupId。例如:

public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
menu.add(UNIQUE_FRAGMENT_GROUP_ID, MENU_OPTION_1, 0, R.string.src1);
menu.add(UNIQUE_FRAGMENT_GROUP_ID, MENU_OPTION_2, 0, R.string.src2);
}
public boolean onContextItemSelected(MenuItem item) {
//only this fragment's context menus have group ID of -1
if (item.getGroupId() == UNIQUE_FRAGMENT_GROUP_ID) {
switch(item.getItemId()) {
case MENU_OPTION_1: doSomething(); break;
case MENU_OPTION_2: doSomethingElse(); break;
}
}

这样,您的所有 fragment 仍会收到对“onContextItemSelected”的调用,但只有正确的 fragment 会响应,从而无需编写 Activity 级代码。我假设即使您没有使用 'menu.add(...)' ,这种技术的修改版本也可以工作

关于android - 如何在多 fragment Activity 中处理 onContextItemSelected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com