我的MenuItem的getActionView()返回null

时间:2013-01-11 21:16:38

标签: android view null android-actionbar

我只想通过代码调整ActionBar MenuItem的视图。

不幸的是,似乎getActionView总是返回null!

我的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = this.getSupportMenuInflater();
    inflater.inflate(R.menu.folder, menu);
    return super.onCreateOptionsMenu(menu);

}

public boolean onPrepareOptionsMenu(final Menu menu) {
    MenuItem menuFolder = menu.findItem(R.id.menu_folder);
    Log.i("", "* onPrepareOptionsMenu *" + menuFolder);
    Log.i("", "* getActionView *" + menuFolder.getActionView());

记录是:

  

01-11 22:13:42.884:I /(7893):* onPrepareOptionsMenu   *com.actionbarsherlock.internal.view.menu.MenuItemWrapper@41401ac8

     

01-11 22:13:42.884:I /(7893):* getActionView * null

非常感谢您的帮助

编辑:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item 
          android:id="@+id/menu_folder"
          android:icon="@drawable/ic_menu_archive"
          android:showAsAction="always"/>
</menu>

5 个答案:

答案 0 :(得分:44)

你应该使用

app:actionLayout="@layout/menu_actionbar_basket"

这就是诀窍 如果你使用

android:actionLayout="@layout/menu_actionbar_basket"

默认工具栏中总是会出现null异常。

答案 1 :(得分:32)

getActionView()仅在来自setActionView的自定义actionView时有效。

答案 2 :(得分:28)

对我来说,有效的解决方案是使用 app 命名空间而不是android。

app:actionViewClass="android.support.v7.widget.SearchView"

不要忘记申报: xmlns:app="http://schemas.android.com/apk/res-auto"

答案 3 :(得分:6)

如果您的调试版本工作没有任何问题,并且只有发布版本存在问题,那么这可能是因为proguard配置。如果您已在应用程序中启用了proguard,请将以下行添加到proguard-rules.pro

-keep class android.support.v7.widget.SearchView { *; }

答案 4 :(得分:2)

第一个解决方案

可能是由于您没有在菜单文件中设置 actionLayout 因此请在菜单文件中设置 actionLayout

app:actionLayout="@layout/your_action_layout"

第二个解决方案 第二种解决方法是

来自

android:actionLayout="@layout/your_action_layout"

app:actionLayout="@layout/your_action_layout"