2016-12-01 108 views
0

我有ViewPager两个FragmentsSearchView中的第二个片段中的SearchView为null

first fragment加载SearchViewToolbar

second fragment我想隐藏SearchView并出现在菜单上的另一个项目。

问题是,当我尝试从second fragment视图中隐藏的SearchViewonCreateOptionsMenu总是

在将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); 
    ............. 
    ............. 
    } 

menu.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> 

片段号2

@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); 
} 

即溶液有这个问题吗?谢谢

回答

0

,我已经修复了错误更新编译工具(v.25.0.2)AndroidSupportRepository(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); 
} 

升级之前,这种方法不能夸大菜单。只有运行menu.clear()

0

你在onCreateView方法中添加了这行代码:setHasOptionsMenu(true); 在这两个片段中添加此行。 如果仍然无法解决此问题,请为第二个片段类创建一个新的菜单资源。但我自己使用了10个片段类的菜单资源,所以它也应该是可能的。