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

Вместо использования другого меню внутри каждого фрагмента пейджера представления - раздуйте меню, вызовите invalidateOptionsMenu() внутри объекта ViewPager onPageChangeListener и программно отобразите желаемый значок меню в 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); 
    } 

Теперь нет задержек, а значки меню обновляются до завершения анимации салфетки.

Смежные вопросы