dynamic更新TabLayout而不更改选定的选项卡

我想用Material Design Support库实现一个向导。

我正在使用ViewPagerTablayout但我有问题dynamic添加新标签。

首先,我在onCreate方法中设置我的小部件:

 viewPager = (ViewPager) findViewById(R.id.tab_viewpager); tabLayout = (TabLayout) findViewById(R.id.tab_layout); adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFrag(new DummyFragment(), "1"); adapter.addFrag(new DummyFragment(), "2"); viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(viewPager); 

然后我想添加另一张牌,当点击列表中的一个元素时:

 adapter.addFrag(new DummyFragment(), "3"); adapter.notifyDataSetChanged(); tabLayout.setTabsFromPagerAdapter(adapter); 

问题是:添加之后,选定的卡被重置为第一个。

如何防止这种行为?

Related of "dynamic更新TabLayout而不更改选定的选项卡"

刚跑了同样的问题,幸运地find了一个解决scheme(不是一个漂亮的,但它的工作原理):

当你需要更新标签时:

 pageradapter.notifyDataSetChanged(); for (int i = 0; i < viewpager.getCount(); i++) { sectionsTabLayout.getTabAt(i).setText(sectionsViewPagerAdapter.getPageTitle(i)); } 

这是对@Kalpit代码的轻微修改。 你将不得不dynamic地添加这个新的选项卡到我们的布局,并通过调用适配器相同的方法,当您使用setupWithViewPager方法调用相同的方法。因此,我用这个try catch语句的标签还没有被创build但是你可以尝试给他们分配一些标题。

  adapter.notifyDataSetChanged(); for(int i = 0;i<adapter.getCount();i++){ try{ tablayout.getTabAt(i).setText(adapter.getPageTitle(i)); } catch(IndexOutOfBoundException e){ tablayout.addTab(tablayout.newTab().setText(adapter.getPageTitle(i)); } }