Android:根据ViewPager显示操作栏菜单项

Jos*_*osh 12 android android-viewpager android-actionbar

我无法获得以下代码来解决问题.我有viewpager3个片段,我想要一个只显示在一个上的搜索图标.我开始试图通过片段添加搜索功能,但是当滑动到该页面时,菜单项的渲染速度很慢.我现在要将搜索图标添加到活动中,然后根据viewpager活动的页面隐藏或显示,但以下操作不起作用:

public class MyApp extends FragmentActivity implements 
   FragmentTeams.FragmentNotification,ViewPager.OnPageChangeListener, 
      OnNavigationListener{

  ...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);

    menuSearch = menu.findItem(R.id.menu_search);
    mSearchView = new SearchView(this);
    menuSearch.setActionView(mSearchView);
    menuSearch.setVisible(false);
    return true;
}

 @Override
public void onPageSelected(int pageNum) {

if(pageNum== 1){     
    ActionBar actionBar = MyApp.this.getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);     
        menuSearch.setVisible(true);
        invalidateOptionsMenu();

}else{           
    ActionBar actionBar = MyApp.this.getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);  
        menuSearch.setVisible(false);
        invalidateOptionsMenu();
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然上面的(似乎)创建并隐藏了图标onCreateOptionsMenu,但在移动时不会重新启用

 pageNum ==1  
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一些见解,为什么会发生这种情况?

Ner*_*een 22

invalidateOptionsMenu让系统调用方法onPrepareOptionsMenu,因此您可以按如下方式覆盖此方法:

public boolean onPrepareOptionsMenu(Menu menu) {
      int pageNum = getCurrentPage();
      if (pageNum == 1) {
         menu.findItem(R.id.menu_search).setVisible(true);

      }
      else {
         menu.findItem(R.id.menu_search).setVisible(false);
      }
   }

public void onPageSelected(int pageNum) {
    invalidateOptionsMenu();
}
Run Code Online (Sandbox Code Playgroud)