无法使用支持库获取ActionBar MenuItem的操作视图

时间:2013-12-21 16:37:09

标签: android android-actionbar-compat

我最近从ActionBarSherlock切换到Android Support Library ActionBar,现在我在操作栏中的微调器的操作视图上显示为null。

以下是docs建议的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) { 
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.home_menu, menu); 
  MenuItem spinnerItem = menu.findItem(R.id.menuNavigateType);
  View view = MenuItemCompat.getActionView(spinnerItem);// !! view is NULL !!
        ...
}

这是R.menu.home_menu

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:myapp="http://schemas.android.com/apk/res-auto"> 
  ...
  <item 
    android:id="@+id/menuNavigateType"
    myapp:showAsAction="always"
    myapp:actionViewClass="android.support.v7.widget.Spinner"  />
     ...
</menu>

如何获取我的操作视图?

感谢。

2 个答案:

答案 0 :(得分:3)

不确定,但请尝试以下操作,而不是MenuItemCompat.getActionView(),请使用:

@Override
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.home_menu, menu);   
    MenuItem spinnerItem = menu.findItem(R.id.menuNavigateType);

    View view = spinnerItem.getActionView();
    // ...
    if(view instanceof Spinner) {
        final Spinner spinner = (Spinner) view;
        // create your adapter
        // ...
        // set your adapter
        spinner.setAdapter(adapter);
    }
}

同样适用于您的商品,而不是android.support.v7.widget.Spinner

<item
    android:id="@+id/menuNavigateType"
    myapp:showAsAction="always"
    myapp:actionViewClass="android.widget.Spinner" >  

我在这里看到了这个解决方案:Android ActionBar (ActionBarCompat) Spinner Dropdown list ? 如果它对你有帮助,请告诉我。

答案 1 :(得分:0)

错误很可能是因为缺少support.v7库。 只是不要使用myapp。代替:

<item android:id="@+id/menuNavigateType"
      android:showAsAction="always"
      android:actionViewClass="android.widget.Spinner"/>