在不更改选定选项卡的情况下动态更新 TabLayout
Posted
技术标签:
【中文标题】在不更改选定选项卡的情况下动态更新 TabLayout【英文标题】:Dynamically updating TabLayout without changing selected tab 【发布时间】:2016-03-23 03:18:45 【问题描述】:我想用材料设计支持库实现一个向导。
我正在使用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);
问题是:添加后,选择的卡被重置为第一个。
如何防止这种行为?
【问题讨论】:
【参考方案1】:刚刚遇到同样的问题,幸运的是找到了一个解决方案(不是很漂亮,但它有效):
当您需要更新标签时:
pageradapter.notifyDataSetChanged();
for (int i = 0; i < viewpager.getCount(); i++)
sectionsTabLayout.getTabAt(i).setText(sectionsViewPagerAdapter.getPageTitle(i));
【讨论】:
【参考方案2】:这是对@Kalpit 代码的轻微修改。 您必须将这个新选项卡动态添加到我们的布局中,并通过从适配器调用相同的方法来分配标题,当您使用 setupWithViewPager 方法时,该方法由 tablayout 调用。所以我对尚未创建的选项卡使用了这个 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));
【讨论】:
以上是关于在不更改选定选项卡的情况下动态更新 TabLayout的主要内容,如果未能解决你的问题,请参考以下文章