Android 菜单项从未膨胀过

Android menu items not getting inflated ever

我正在制作一个 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>

在我的主要 activity 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);

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

谢谢

您可以使用

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

一旦你膨胀了你的菜单。

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