搜索视图在ViewPager中的第二个片段中为null



我有一个 ViewPager,带有两个 Fragments

first fragment中,SearchView中的CC_4。

second fragment中,我想 hide SearchView,并在菜单上出现另一个项目。

问题是当我尝试从 second fragment视图中隐藏 SearchView项目时, onCreateOptionsMenu始终是 null

在更新SDK和Android.support库之前,从版本22中,这些方法正常工作。

片段1:

@Override
public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) {
    menu.clear();
    inflater = getActivity().getMenuInflater();
    inflater.inflate(R.menu.menu_view_pager, menu);
    final MenuItem item = (menu.findItem(R.id.action_search));
    SearchView searchView = (SearchView) item.getActionView();
    MenuItemCompat.setActionView(item, searchView);
    MenuItemCompat.expandActionView(item);
    searchView.setMaxWidth(Integer.MAX_VALUE);
    searchView.setIconifiedByDefault(true);
    searchView.setIconified(false);
    ............. 
    .............
  }

菜单.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <item
        android:id="@+id/action_search"
        android:title="@string/search_action"
        android:icon="@android:drawable/ic_menu_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always"
        android:orderInCategory="100"
        android:gravity="start"
        />
   </menu>

片段二

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    inflater.inflate(R.menu.menu_edit, menu);
    menu.findItem(R.id.action_search).setVisible(false); 
    /*The top line cause NullPointerException. In debug "action_search" 
     item is in ActionItems, but menu items is empty.*/
    menuItem = menu.findItem(R.id.action_edit);
    disableButtons();
    super.onCreateOptionsMenu(menu, inflater);
}

这个问题有这个问题吗?谢谢

您是否在onCreateview方法中添加了此代码行:sethasoptionsmenu(true);在您的两个片段中添加这一行。如果您仍然无法解决此问题,请为您的第二片片段创建一个新的菜单资源。但是我本人为10个片段使用了一个菜单资源,因此也应该为您提供。

我已经修复了错误更新 buildTools(v.25.0.2) and androidsupportretrepository(v.41)>另外,我在Onprepareoptionsmenu中使用了此逻辑:

  @Override
  public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    toolbar.getMenu().clear();    //remove all items
    toolbar.inflateMenu(R.menu.menu_edit);
    menuItem = toolbar.getMenu().findItem(R.id.action_edit);
 }

在升级之前,无法在此方法中夸大菜单。仅运行菜单。clear()

相关内容

  • 没有找到相关文章

最新更新