2016-03-09 11 views
5

Na moje pytanie odpowiedziało kilka razy, gdy jest to TabActivity z tabWidgets. Ale nie mogłem znaleźć nic na temat relatywnie nowego widoku TabLayout.Jak wykrywać kliknięcie na już wybranej zakładce w TabLayout

To całkiem proste, jak na facebooku, chcę dotknąć już wybranej zakładki, aby moja lista przewinęła się aż do początku. ale nie wiem, gdzie umieścić mojego słuchacza.

Próbowałem na samym TabLayout, mTabLayout.getChildAt() i na TabLayout.getTabAt().getCustomView().


EDIT: Korekta: Jak CommonsWare wymieniono w komentarzu do swojej odpowiedzi, musiałem przepisać zachowanie „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(); 
      } 
    } 
}); 

Dzięki!

Odpowiedz

13

Na podstawie wydatków ~ 10 sekund przeczytaj dokumentację ... zadzwoń pod numer setOnTabSelectedListener() on the TabLayout. Przekaż implementację OnTabSelectedListener. Twoja metoda wywołania zwrotnego zdarzenia is onTabReselected().

+1

Taa .. może dlatego nie ma stackoverflow o nim. Nie działa dla mnie, myślałem, nie mogę wywołać zdarzenia. Będę pisać mój kod –

+0

Było to spowodowane zamawianiem moich linii kodu. Nie wiem dlaczego, ale nie działa, jeśli po ustawieniu detektora zostanie wywołany '' 'setupWithViewager''' –

+0

@RenaudFavier: Jedną z podklas konkretnych' OnTabSelectedListener' jest 'ViewPagerOnTabSelectedListener'. Wywołanie "setupWithViewager()' prawdopodobnie zastąpi własnego detektora. Musisz ustalić, jak najlepiej sobie poradzić z danym wydarzeniem, a także mieć integrację z ViewPager. – CommonsWare

1

nie stracić domyślne zachowanie go używać jak to

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 
    } 
}); 
Powiązane problemy