我的应用程序正在使用Tab Layout。我在MainActivity中创建了四个选项卡(这是我打开应用程序时启动的活动)。 每个选项卡都使用viewpager与片段相关联。请参考以下代码:
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并且使用处理程序解决方案对第二个问题有好处。
答案 0 :(得分:0)
嘿,请检查以下代码:
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);
}});