onTabSelected выбрано, не вызывается
Я только что перенес мой старый ActionBar
к новому TabLayout
(Поддержка Материалов Дизайн).
Все отлично, но я не могу перехватить выбор вкладки Метод onTabSelected
называется только в первый раз TabLayout
отображается, но при нажатии на вкладки ничего не происходит! Есть идеи, что не так с этим кодом?
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
mViewPager = (ViewPager) findViewById(R.id.pager);
if (mViewPager != null) {
setupViewPager();
}
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
numTab = tab.getPosition();
prefs.edit().putInt("numTab", numTab).apply();
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
tabLayout.setupWithViewPager(mViewPager);
2 ответа
Когда вы звоните setupWithViewPager
, это будет внутренне звонить setOnTabSelectedListener(new ViewPagerOnTabSelectedListener(viewPager));
переопределяя OnTabSelectedListener
,
Вместо этого ваш слушатель должен расширить TabLayout.ViewPagerOnTabSelectedListener, а затем переопределить onTabSelected()
и позвонить setOnTabSelectedListener()
после setupWithViewPager()
:
tabLayout.setupWithViewPager(mViewPager);
tabLayout.setOnTabSelectedListener(
new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) {
@Override
public void onTabSelected(TabLayout.Tab tab) {
super.onTabSelected(tab);
numTab = tab.getPosition();
prefs.edit().putInt("numTab", numTab).apply();
}
});
Вот несколько более полный пример с тремя вкладками. Он использует более новый addOnTabSelectedListener
скорее, чем setOnTabSelectedListener
,
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
tabLayout.addTab(tabLayout.newTab().setText("Tab 3"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final PagerAdapter adapter = new PagerAdapter
(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
Log.i("TAG", "onTabSelected: " + tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
Log.i("TAG", "onTabUnselected: " + tab.getPosition());
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
Log.i("TAG", "onTabReselected: " + tab.getPosition());
}
});
Заметки:
onTabSelected
а такжеonTabUnselected
Вызываются каждый раз, когда происходит изменение вкладок.onTabReselected
вызывается всякий раз, когда вкладка нажимается снова, когда она уже отображается.