标签布局选择方法不会调用onTabSelected在android

标签布局选择方法不会调用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,并且是使用处理程序解决方案对于第二个问题的好处。

+0

这是为什么#1不工作的解释http://stackoverflow.com/questions/30904265/ontabselected-selected-not-called – Alex

+0

@Alex我我已经遵循了您提供的链接中提到的准则。当我滑动或选择任何选项卡时,我会得到onTabSelected回调。 我的问题是,当我选择一个选项卡编程使用tabLayout.getTabAt(1).select()。此API不会触发onTabSelected回调。但在内部,当我检查这个API的实现时,它会触发onTabSelected回调。但一些我怎么不能接收它。 –

+0

man只需添加一行viewPager.setCurrentPage(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); 
}}); 
+0

这看起来工作,我试图添加viewPager.setCurrentItem(1);添加viewPager.addOnPageChangeListener ....但我仍然不明白其原因 –

+0

请接受答案我会解释你在聊天 –

+0

以清楚了解viewpager如何工作如何将日志放入onPageSelected,onPageScrollled,onPageunselected,onTabSelected ,onTabRelected,onTabUnselected并且读取日志 –