【问题标题】:Dynamically updating TabLayout without changing selected tab在不更改选定选项卡的情况下动态更新 TabLayout
【发布时间】:2016-03-23 03:18:45
【问题描述】:

我想用材料设计支持库实现一个向导。

我正在使用ViewPagerTablayout,但动态添加新标签时遇到问题。

首先,我在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);

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

如何防止这种行为?

【问题讨论】:

    标签: android android-layout android-viewpager android-tablayout


    【解决方案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));
            }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多