2016-03-09 16 views
5

Câu hỏi của tôi đã được trả lời nhiều lần khi đó là TabActivity với tabWidgets. Nhưng tôi không thể tìm thấy bất cứ điều gì về quan điểm mới TabLayout tương đối mới.Cách phát hiện nhấp chuột trên tab đã chọn trong TabLayout

Nó khá đơn giản, giống như facebook, tôi muốn nhấn vào một tab đã chọn để danh sách của tôi cuộn lên đến khi bắt đầu. nhưng tôi không thể tìm ra nơi để đưa người nghe của mình.

Tôi đã thử trên TabLayout chính nó, mTabLayout.getChildAt() và trên TabLayout.getTabAt().getCustomView().


EDIT: Correction: Như CommonsWare mentionned trong những nhận xét câu trả lời của mình, tôi đã phải viết lại hành vi của "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(); 
      } 
    } 
}); 

Cảm ơn!

Trả lời

13

Dựa trên chi tiêu ~ 10 giây đọc tài liệu ... hãy gọi setOnTabSelectedListener() on the TabLayout. Chuyển qua triển khai OnTabSelectedListener. Phương thức gọi lại sự kiện is onTabReselected() của bạn.

+1

yeah .. có lẽ đó là lý do tại sao không có stackoverflow về nó. Không làm việc cho tôi nghĩ, tôi không thể kích hoạt sự kiện. Tôi sẽ đăng mã của tôi –

+0

Đó là do thứ tự các dòng mã của tôi. Tôi không biết tại sao nhưng nó không hoạt động nếu '' 'setupWithViewPager''' được gọi sau khi thiết lập người nghe –

+0

@RenaudFavier: Một lớp con cụ thể của' OnTabSelectedListener' là 'ViewPagerOnTabSelectedListener'. Gọi 'setupWithViewPager()' có thể thay thế người nghe của riêng bạn. Bạn sẽ cần phải tìm ra cách tốt nhất để xử lý sự kiện bạn muốn và cũng có tích hợp 'ViewPager'. – CommonsWare

1

Để không bị mất hành vi mặc định sử dụng nó như thế này

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 
    } 
}); 
Các vấn đề liên quan