3

アプリケーションのタブをスワイプすると、メニューアイコンが表示されるまでに明確な遅延が発生します。スワイプするのではなくタブをクリックすると、すぐに更新されます。私は、各フラグメントの異なるmenu.xmlファイルを持っており、各フラグメントのonCreateOptionsMenuの中でそれらを膨張させます。スワイプ時のViewPagerメニューアイコンの遅延

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.fodmap_menu, menu); 

    final MenuItem item = menu.findItem(R.id.action_search); 
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 
    searchView.setOnQueryTextListener(this); 
} 

enter image description here

注意瞬時拡大鏡へオーバーフローからアイコンの変更タブをクリックするが、スワイプ場合はっきり遅延されます。新しいタブが中央に配置されるとすぐにアイコンを更新したいと思います。ポケットキャストのディスカバーメニューでは、スワイプアニメーションが完了する前でもさまざまなメニューアイコンのタブが表示されます。

答えて

3

ViewPagerの各フラグメント内に別のメニューを使用する代わりに、メニューを膨張させ、ViewPagerのonPageChangeListener内でinvalidateOptionsMenu()を呼び出し、onCreateOptionsMenuに目的のメニューアイコンをプログラムで表示します。 searchViewリスナーはまだフラグメント内で処理されます。

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      invalidateOptionsMenu(); 
     } 

     @Override 
     public void onPageSelected(int position) {} 
     @Override 
     public void onPageScrollStateChanged(int state) {} 
    }); 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.fodmap_menu, menu); 
     if (mViewPager.getCurrentItem()==0){ 
      menu.findItem(R.id.action_search).setVisible(false); 
     } else if(mViewPager.getCurrentItem()==1){ 
      menu.findItem(R.id.action_search).setVisible(true); 
     } else if(mViewPager.getCurrentItem()==2) { 
      menu.findItem(R.id.action_search).setVisible(false); 
     } 
     return super.onCreateOptionsMenu(menu); 
    } 

スワイプアニメーションが終了する前に遅延がなく、メニューアイコンが更新されます。

関連する問題