Android TabLayout不反映ViewPager适配器';改变
我想要一个选项卡式对话框。所以我添加了一个TabLayout,并在其下方添加了一个ViewPager。我创建了一个FragmentPagerAdapter,并用它调用了ViewPager的Android TabLayout不反映ViewPager适配器';改变,android,android-viewpager,android-tablayout,Android,Android Viewpager,Android Tablayout,我想要一个选项卡式对话框。所以我添加了一个TabLayout,并在其下方添加了一个ViewPager。我创建了一个FragmentPagerAdapter,并用它调用了ViewPager的setAdapter()。然后我用ViewPager调用了TabLayout的setupWithViewPager() 现在,我增加了FragmentPagerAdapter的计数,并向其添加了一个新片段,名为notifyDataSetChanged()。问题是新选项卡没有出现 在尝试了很多东西之后,我用同一个
setAdapter()
。然后我用ViewPager调用了TabLayout的setupWithViewPager()
现在,我增加了FragmentPagerAdapter的计数,并向其添加了一个新片段,名为notifyDataSetChanged()
。问题是新选项卡没有出现
在尝试了很多东西之后,我用同一个ViewPager再次调用了TabLayout的
setupWithViewPager()
。它确实使新选项卡出现,但我不确定这是否是正确的方法。为什么表格布局不能自动反映对ViewPager的更改(新片段)?您的解决方案非常简单,但还需要一件事。如果您可以看到setupWithViewPager()
方法的作用,它还会向viewPager添加tablayoutonpagechangerelistener
,因此无论何时调用setupWithViewPager()
您都会添加一个以上的侦听器。在调用setupWithViewPager()
之前,您应该调用viewPager.clearOnPageChangeListeners()
删除旧的Liseters,这样就可以了
在我正在研究的项目中,我们使用了一种稍微不同的解决方案,但这是因为使用了具有某些特定行为的自定义选项卡视图:
您可以在viewpageradapter上注册DatasetObserver。无论何时调用
notifyDataSetChanged()
您的DataSetObserver.onChanged()
也将被调用。在这个方法中,我们使用tablayout中的选项卡进行操作(创建新的/删除旧的)。。我们还为tabLayout创建新的onTabSelectedListeners 您需要按照上面的建议添加观察者。为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);
}
}
});
mAdapter.registerDataSetObserver(新的DataSetObserver(){
@凌驾
更改后的公共无效(){
super.onChanged();
if(tabLayout.getTabCount()
我被困在这两天了。感谢一个LotinSted viewPager.clearOnPageChangeListeners(),我做了TableLayout.ClearOnAbsSelectedListeners()