我想要一个标签式对话框。所以我在它下面添加了一个TabLayout和一个ViewPager。我创建了一个FragmentPagerAdapter,并使用它调用ViewPager的setAdapter()
。然后我用ViewPager调用了TabLayout的setupWithViewPager()
。
现在,我增加了FragmentPagerAdapter的计数,并为其添加了一个新片段,并调用了notifyDataSetChanged()
。问题是没有出现新选项卡。
在尝试了很多事情之后,我再次使用相同的ViewPager调用了TabLayout的setupWithViewPager()
。它确实显示了新选项卡,但我不确定这是否是正确的方法。为什么TabLayout不会自动反映对ViewPager(新片段)的更改?
答案 0 :(得分:1)
您的解决方案非常简单,但还需要一件事。如果您可以看到TabLayoutOnPageChangeListener
的方法,它还将 setupWithViewPager()
添加到viewPager,因此每当您调用viewPager.clearOnPageChangeListeners()
时,您都会再添加一个侦听器。在致电setupWithViewPager()
之前,您应该致电notifyDataSetChanged()
删除旧的lisetner,这样就可以了。
在项目中,我正在使用,我们使用的是一个不同的解决方案,但这是因为使用了一些特定行为的自定义选项卡视图:
您可以在viewpageradapter上注册registerDataSetserver。每当您拨打DataSetObserver.onChanged()
时,您的rails new <appname>
gem uninstall bundler
gem install bundler -v 1.9
cd <appname>
bundle install
也会被呼叫。在这个方法中,我们使用tablayout中的选项卡进行操作(创建新的/删除旧的)。我们还为tabLayout创建了新的onTabSelectedListeners。
答案 1 :(得分:0)
您需要按照上面的建议添加观察者。在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);
}
}
});