2016-02-13 47 views
1

我想要一个选项卡式对话框。所以我在它下面添加了一个TabLayout和一个ViewPager。我创建了一个FragmentPagerAdapter,并使用它调用ViewPager的setAdapter()。然后我用ViewPager调用TabLayout的setupWithViewPager()TabLayout不反映ViewPager适配器的变化

现在,我增加了FragmentPagerAdapter的计数,并添加了一个新的片段,并且调用notifyDataSetChanged()。问题是新标签没有出现。

尝试了很多东西后,我再次使用相同的ViewPager调用TabLayout的setupWithViewPager()。它确实使新选项卡出现,但我不确定这是否是正确的方法。为什么TabLayout不会自动反映对ViewPager(新片段)的更改?

回答

1

您的解决方案非常简单,但还需要一件事。如果你可以看到setupWithViewPager()有什么方法,它也可以TabLayoutOnPageChangeListener添加到viewPager,所以无论你何时调用setupWithViewPager(),你都会添加一个监听器。您应该致电viewPager.clearOnPageChangeListeners()删除旧lisseners,就在您致电setupWithViewPager()之前,它会没事的。

在项目中,我正在使用一些不同的解决方案,但这是因为使用自定义选项卡视图以及一些特定行为: 您可以在viewpageradapter上注册DataSetObserver。无论何时您致电notifyDataSetChanged(),您的DataSetObserver.onChanged()也将被调用。在这个方法中,我们使用tablayout中的选项卡来操作(创建新的/删除旧的)。我们还为tabLayout创建了新的onTabSelectedListeners。

0

您需要按照上面的建议添加Observer。在你的this.viewPager和this.tabLayout使用的this.mAdapter中添加一个新选项卡。

 mAdapter.registerDataSetObserver(new DataSetObserver() { 
     @Override 
     public void onChanged() { 
      super.onChanged(); 
      if (tabLayout.getTabCount() < mAdapter.getCount()) { 
       tabLayout.addTab(tabLayout.newTab().setText(mAdapter.getPageTitle(mAdapter.getCount() - 1)), mAdapter.getCount() - 1); 
      } 
     } 
    });