标签布局选择方法不会调用onTabSelected在android
我的应用程序正在使用选项卡布局。我在MainActivity中创建了四个选项卡(这是在打开应用程序时启动的活动)。 每个选项卡都使用viewpager与片段关联。请参考下面的代码:标签布局选择方法不会调用onTabSelected在android
TabLayout tabLayout;
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
pagerAdapter = new MainFragmentPagerAdapter(this, getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
// Give the TabLayout the ViewPager
tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
tabLayout.setupWithViewPager(viewPager);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) {
@Override
public void onTabSelected(TabLayout.Tab tab) {
super.onTabSelected(tab);
}});
这就是我在做的MainActivity的onCreate方法。 默认情况下,应用程序将第一个选项卡显示为选定的选项卡。但是每次应用程序启动时,我都想将2ndTab显示为选定的选项卡。
所以为了这个,我正在使用MainActivity的方法的onResume下面的代码:
tabLayout.getTabAt(1).select(); //position 1 - means second tab , 0 means tab 1
这个API正确选择第二个选项卡。 但问题1: - 它不会调用我已覆盖的onTabSelected方法。
问题2:右在调用tab.select后,当我尝试获取与第二个选项卡关联的片段时,它将返回null。
@Override
public void onResume() {
tabLayout.getTabAt(1).select();
Fragment page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.viewpager + ":" + 1); // position 1 is for 2nd tab.
}
这里的页面是NULL。但如果我尝试在2秒后获取页面(使用Android Handler postDelayed)。它给了我适当的页面值。这是我如何使用处理程序:
@Override
public void onResume() {
tabLayout.getTabAt(1).select();
handler.postDelayed(getFragment, 2000);
}
private Runnable getFragment = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Fragment page = null;
page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.viewpager + ":" + 1); // position 1 is for 2nd tab
}
};
现在页面值将从run方法来适当。
那么我该如何解决问题1,并且是使用处理程序解决方案对于第二个问题的好处。
嘿请检查下面的代码:
TabLayout tabLayout;
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
pagerAdapter = new MainFragmentPagerAdapter(this,getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
// Give the TabLayout the ViewPager
tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
tabLayout.setupWithViewPager(viewPager);
viewPager.setCurrentItem(1);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new
TabLayout.ViewPagerOnTabSelectedListener(viewPager) {
@Override
public void onTabSelected(TabLayout.Tab tab) {
super.onTabSelected(tab);
}});
这看起来工作,我试图添加viewPager.setCurrentItem(1);添加viewPager.addOnPageChangeListener ....但我仍然不明白其原因 –
请接受答案我会解释你在聊天 –
以清楚了解viewpager如何工作如何将日志放入onPageSelected,onPageScrollled,onPageunselected,onTabSelected ,onTabRelected,onTabUnselected并且读取日志 –
这是为什么#1不工作的解释http://stackoverflow.com/questions/30904265/ontabselected-selected-not-called – Alex
@Alex我我已经遵循了您提供的链接中提到的准则。当我滑动或选择任何选项卡时,我会得到onTabSelected回调。 我的问题是,当我选择一个选项卡编程使用tabLayout.getTabAt(1).select()。此API不会触发onTabSelected回调。但在内部,当我检查这个API的实现时,它会触发onTabSelected回调。但一些我怎么不能接收它。 –
man只需添加一行viewPager.setCurrentPage(1); –