【问题标题】:Android menu items not getting inflated everAndroid 菜单项永远不会膨胀
【发布时间】:2015-03-22 19:44:04
【问题描述】:

我正在制作一个 android 应用程序,我正在尝试将一些 java 代码应用到 xml 菜单项,但它们并没有膨胀。我在我的菜单 xml 文件(存储在 res/menu/main.xml)中定义了一些菜单项,定义如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".HomeActivity"
    app:showAsAction="always">

    <item android:id="@+id/action_close"
          android:title="Close"
          android:icon="@drawable/exitediting"
          android:enabled="false"
          app:showAsAction="always"/>

    <item android:id="@+id/action_edit"
          android:title="Edit"
          android:icon="@drawable/editbutton"
          android:enabled="false"
          app:showAsAction="always"/>

    <item android:id="@+id/action_mainedit"
          android:title="MainEdit"
          android:icon="@drawable/exitediting"
          android:enabled="true"
          app:showAsAction="always"/>

</menu>

然后,在我的主要活动 java 代码中,我将覆盖菜单充气器,如下所示:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    createAnimatorSets();
    return true;
}

然后在我的 createAnimatorSets 函数中,我尝试访问这样的按钮

final ActionMenuItemView editButton = (ActionMenuItemView) toolbar.getChildAt(1).findViewById(R.id.action_edit);
final ActionMenuItemView closeButton = (ActionMenuItemView) toolbar.getChildAt(1).findViewById(R.id.action_close);
final ActionMenuItemView mainButton = (ActionMenuItemView) toolbar.getChildAt(1).findViewById(R.id.action_mainedit);

这只是返回空值。我试图在代码中的这一点放置一个断点并观察一些变量。 R.id.action_edit 按预期返回 id,但 findViewById(R.id.action_edit) 和 toolbar.getChildAt(1).findViewById(R.id.action_edit) 都返回 null。工具栏本身(变量名称工具栏)就在那里,按钮存储在里面,但由于某种原因它们没有膨胀以便被使用。我也尝试在 onStart 方法而不是 onCreate 中执行此操作,但这也不起作用。有谁知道如何解决这个问题。

谢谢

【问题讨论】:

  • 尝试在 oncreate 方法上添加 sethasoptionsmenu(true)
  • @Catalina 当我试图解决它时,我在其他地方看到了这个。此方法仅适用于片段而不是主要活动

标签: java android xml android-activity android-inflate


【解决方案1】:

您可以在 onCreateOptionsMenu(Menu menu) 方法中使用

获取对 MenuItems 的引用
MenuItem edit = menu.findItem(R.id.action_edit);
View actionViewEdit = edit.getActionView();

一旦你膨胀了你的菜单。

【讨论】:

  • 感谢您的意见。我已经尝试过了,menu.findItem 实际上返回了一个 menuitemimpl 对象,但是 getactionview 方法仍然返回 null
【解决方案2】:

所以经过大量测试后,似乎菜单只会在 onResume 中膨胀。这导致了我的问题的一个非常 hacky 的解决方案,但在未来,如果人们对此感到困扰,你需要在 onresume 中做你的事情,如果需要,只需将按钮设置为最初隐藏在 xml 中,就像我所做的那样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多