3

Wenn Sie zwischen den Registerkarten in meiner Anwendung wischen, haben die Menüsymbole eine deutliche Verzögerung, bevor sie angezeigt werden. Wenn ich auf Tabs klicke, anstatt zu wischen, werden sie sofort aktualisiert. Ich habe verschiedene menu.xml-Dateien für jedes Fragment und blähen sie in jedem onCreateOptionsMenu des jeweiligen Fragments auf.ViewPager-Menüsymbol Verzögerung beim Durchziehen

@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

Hinweis ändert sich das Symbol aus dem Überlauf auf die Lupe sofort, wenn die Registerkarten geklickt werden aber deutlich verzögert, wenn klauen. Ich möchte, dass das Symbol aktualisiert wird, sobald der neue Tab zentriert ist. Im Discover-Menü von Pocket Cast scheinen die Registerkarten mit verschiedenen Menüsymbolen diese zu laden, noch bevor die Wischanimation abgeschlossen ist.

Antwort

3

Anstatt ein anderes Menü innerhalb jedes Fragments des Ansichtspagers zu verwenden - pumpen Sie das Menü auf, rufen invalidateOptionsMenu() im onPageChangeListener des ViewPagers auf und zeigen programmatisch die gewünschten Menüsymbole in onCreateOptionsMenu innerhalb der Hauptaktivität anstelle der Fragmente an. Der searchView-Listener wird weiterhin im Fragment behandelt.

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

Es gibt keine Verzögerung und die Menüsymbole werden aktualisiert, bevor die Wischanimation beendet wird.

Verwandte Themen