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