2016-03-09 54 views
5

我的問題已被回答幾次,當它是TabActivitytabWidgets。但我找不到有關相對新的TabLayout視圖的任何內容。如何在TabLayout中檢測已經選擇的選項卡上的點擊

這很簡單,就像Facebook一樣,我想要點擊一個已經選好的標籤來讓我的列表滾動直到其開始。但我無法弄清楚把聽衆放在哪裏。

我試過TabLayout本身,mTabLayout.getChildAt()TabLayout.getTabAt().getCustomView()


編輯:更正: 作爲CommonsWare mentionned在其答案的評論,我不得不重寫「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(); 
      } 
    } 
}); 

謝謝!

回答

13

基於花費大約10秒的時間閱讀文檔...致電setOnTabSelectedListener() on the TabLayout。傳遞OnTabSelectedListener實現。你的事件回調方法is onTabReselected()

+1

啊..也許這就是爲什麼有沒有關於它的計算器。對我來說不行,我無法觸發事件。我會發布我的代碼 –

+0

這是由於我的代碼行的順序。我不知道爲什麼,但是如果在設置監聽器後調用setupWithViewPager'',則不起作用 –

+0

@RenaudFavier:'OnTabSelectedListener'的一個具體子類是'ViewPagerOnTabSelectedListener'。調用'setupWithViewPager()'可能取代你自己的監聽器。您需要弄清楚如何最好地處理您想要的事件,並且還需要「ViewPager」集成。 – CommonsWare

1

爲了不失去默認行爲,使用這樣的

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 
    } 
}); 
相關問題