2016-03-09 2 views
5

На вопрос был вопрос TabActivity с tabWidgets. Но я не мог найти ничего о релятивистском новом представлении TabLayout.Как обнаружить щелчок на уже выбранной вкладке в TabLayout

Это довольно просто, как и в facebook, я хочу нажать на уже выбранную вкладку, чтобы мой список прокручивался вверх до его начала. но я не могу понять, где поставить слушателя.

Я пробовал на TabLayout сам, mTabLayout.getChildAt() и на TabLayout.getTabAt().getCustomView().


EDIT: Исправление: Как CommonsWare упоминался в комментариях его ответа, я должен был переписать поведение «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

да .. может быть, поэтому нет StackOverflow об этом. Не работает для меня мысль, я не могу вызвать событие. Я отправлю свой код –

+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 
    } 
}); 
Смежные вопросы