Android菜单项永远不会膨胀

时间:2015-03-22 19:44:05

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

我正在创建一个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);

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

由于

2 个答案:

答案 0 :(得分:0)

您可以使用

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

一旦你的菜单膨胀了。

答案 1 :(得分:0)

因此经过大量测试后,似乎菜单只会在onResume中膨胀。这导致了我的问题的一个非常hacky的解决方案,但在将来如果人们为此努力,你需要在onresume上做你的东西,并且如果需要的话,只需将按钮设置为最初隐藏在xml中

相关问题