2016-03-09 15 views
5

La mia domanda ha ricevuto risposta diverse volte quando si tratta di un TabActivity con tabWidgets. Ma non sono riuscito a trovare nulla sulla nuova vista relativamente nuova TabLayout.Come rilevare un clic su una scheda già selezionata in TabLayout

È piuttosto semplice, come facebook, voglio toccare un tab già selezionato per far scorrere la lista fino all'inizio. ma non riesco a capire dove mettere il mio ascoltatore.

Ho provato su TabLayout stesso, mTabLayout.getChildAt() e su TabLayout.getTabAt().getCustomView().


EDIT: Correzione: Come CommonsWare menzionate nelle commento della risposta, ho dovuto riscrivere il comportamento di "onTabSelected".

mTabLayout = (TabLayout) findViewById(R.id.tabs); 
mTabLayout.setupWithViewPager(mViewPager); 

for (int i = 0; i < mTabLayout.getTabCount(); i++) { 
    mTabLayout.getTabAt(i).setIcon(tabIcons[i]); 
} 

mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
    @Override 
    public void onTabSelected(TabLayout.Tab tab) { 
     mViewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(TabLayout.Tab tab) { 

    } 

    @Override 
    public void onTabReselected(TabLayout.Tab tab) { 
     if (tab.getPosition() == PAGE_FEED) { 
       ((PagerNewsFeedFragment) mViewPagerAdapter.getRegisteredFragment(PAGE_FEED)).scrollToTop(); 
      } 
    } 
}); 

Grazie!

risposta

13

In base alla spesa ~ 10 secondi di lettura della documentazione ... chiamare setOnTabSelectedListener() on the TabLayout. Passa a un'implementazione OnTabSelectedListener. Il tuo metodo di callback degli eventi is onTabReselected().

+1

yeah .. forse è per questo che non c'è StackOverflow su di esso. Non funziona per me pensato, non posso attivare l'evento. Pubblicherò il mio codice –

+0

Era dovuto all'ordinamento delle mie linee di codice. Non so perché, ma non funziona se '' 'setupWithViewPager''' viene chiamato dopo aver impostato l'ascoltatore –

+0

@RenaudFavier: La sottoclasse concreta di' OnTabSelectedListener' è 'ViewPagerOnTabSelectedListener'. Chiamare 'setupWithViewPager()' probabilmente sostituisce il tuo ascoltatore. Dovrai elaborare il modo migliore per gestire l'evento che desideri e avere anche l'integrazione con 'ViewPager'. – CommonsWare

1

per non perdere il comportamento predefinito usarlo come questo

TabLayout tabLayout = findById(this, R.id.tabs); 
tabLayout.setupWithViewPager(mViewPager); 
tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) { 
    @Override 
    public void onTabReselected(TabLayout.Tab tab) { 
     // Scroll to top or whatever 
    } 
}); 
Problemi correlati