Android 动态更新TabLayout而不更改所选选项卡

Android 动态更新TabLayout而不更改所选选项卡,android,android-layout,android-viewpager,android-tablayout,Android,Android Layout,Android Viewpager,Android Tablayout,我想用“材质设计支持库”实现一个向导 我正在使用ViewPager和Tablayout,但动态添加新选项卡时遇到问题 首先,我在onCreate方法中设置我的小部件: viewPager = (ViewPager) findViewById(R.id.tab_viewpager); tabLayout = (TabLayout) findViewById(R.id.tab_layout); adapter = new ViewPagerAdapter(getSupportFragmentMan

我想用“材质设计支持库”实现一个向导

我正在使用
ViewPager
Tablayout
,但动态添加新选项卡时遇到问题

首先,我在
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);
问题是:添加后,所选卡被重置为第一张


如何防止这种行为?

刚刚遇到了同样的问题,幸运地找到了一个解决方案(虽然不是很好,但很有效):

当您需要更新选项卡时:

pageradapter.notifyDataSetChanged();
for (int i = 0; i < viewpager.getCount(); i++) {
    sectionsTabLayout.getTabAt(i).setText(sectionsViewPagerAdapter.getPageTitle(i));
}
pageradapter.notifyDataSetChanged();
对于(int i=0;i
这是对@Kalpit代码的轻微修改。 您必须动态地将此新选项卡添加到我们的布局中,并通过从适配器调用TablLayout调用的相同方法来分配标题,当您使用setupWithViewPager方法时,该方法由TablLayout调用。因此,我将此try-catch语句用于尚未创建的选项卡,但您可以尝试为它们分配一些标题

    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));
      }
    }
adapter.notifyDataSetChanged();
对于(int i=0;i