选项卡布局选择方法不会调用android

时间:2016-11-04 09:35:39

标签: android android-viewpager android-tablayout

我的应用程序正在使用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并且使用处理程序解决方案对第二个问题有好处。

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);
}});