相关疑难解决方法(0)

如何在多片段活动中处理onContextItemSelected?

我目前正在尝试调整我的应用程序以使用"适用于Android v4的兼容性库",以便为Android 1.6用户提供使用片段的好处.

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

  • 该应用程序的主要活动是扩展FragmentActivity 类.
  • 这些片段都基于一个扩展Fragment类的类.
  • fragment类在其onCreateView()方法中调用 registerForContextMenu()并覆盖 onCreateContextMenu()onContextItemSelected()方法.

对于onCreateContextMenu(),这非常有效.上下文菜单从资源文件中膨胀,并根据所选项目进行略微修改(基于listView ...即使片段不是ListFragment).

选择上下文菜单项时会发生此问题. 从第一个添加的片段开始,为所有当前存在的片段调用onContextItemSelected().

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

现在,我使用活动级别上的字段的变通方法,该字段包含调用其onCreateContextMenu()的最后一个片段的标记.这样,当存储的标记与getTag()不同时,我可以在onContextItemSelected()的开头调用"return super.onContextItemSelected(item)" .但这种方法对我来说有点脏.

为什么在所有片段上调用onContextItemSelected()?而不只是一个调用onCreateContextMenu()的人

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

android contextmenu android-fragments android-support-library

68
推荐指数
5
解决办法
2万
查看次数

禁用Android菜单组

我尝试使用以下代码禁用菜单组,但它不起作用,菜单项仍然启用.你能告诉我有什么问题吗?

RES /菜单/ menu.xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/a" android:title="A"></item>
  <item android:id="@+id/b" android:title="B">
    <menu>
      <item android:id="@+id/c" android:title="C" />
      <item android:id="@+id/d" android:title="D" />
      <group android:id="@+id/group_1">
        <item android:id="@+id/e" android:title="E" />
        <item android:id="@+id/f" android:title="F" />
      </group>
    </menu>
  </item>
</menu>
Run Code Online (Sandbox Code Playgroud)

Java的:

public boolean onPrepareOptionsMenu (Menu menu) {
    menu.setGroupEnabled (R.id.group_1, false); // does not work
    menu.setGroupVisible (R.id.group_1, false); // does not work either
    return super.onPrepareOptionsMenu (menu);
}

public boolean onCreateOptionsMenu (Menu menu) {
    getMenuInflater ().inflate (R.menu.menu, menu);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

java android menu

6
推荐指数
2
解决办法
9535
查看次数