Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android TabLayout不反映ViewPager适配器';改变_Android_Android Viewpager_Android Tablayout - Fatal编程技术网

Android TabLayout不反映ViewPager适配器';改变

Android TabLayout不反映ViewPager适配器';改变,android,android-viewpager,android-tablayout,Android,Android Viewpager,Android Tablayout,我想要一个选项卡式对话框。所以我添加了一个TabLayout,并在其下方添加了一个ViewPager。我创建了一个FragmentPagerAdapter,并用它调用了ViewPager的setAdapter()。然后我用ViewPager调用了TabLayout的setupWithViewPager() 现在,我增加了FragmentPagerAdapter的计数,并向其添加了一个新片段,名为notifyDataSetChanged()。问题是新选项卡没有出现 在尝试了很多东西之后,我用同一个

我想要一个选项卡式对话框。所以我添加了一个TabLayout,并在其下方添加了一个ViewPager。我创建了一个FragmentPagerAdapter,并用它调用了ViewPager的
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()