Android TabLayout选择启动时的第一个标签

时间:2016-05-06 12:50:04

标签: android tabs selection

我正在使用Android设计库中的TabLayout。我有多个选项卡,每个选项卡在选中时都有一个操作。所以我有一个属性startSelection,它执行

tabLayout.getTabAt(startSelection).select();

这将选择选项卡并执行此选项卡的操作。它适用于除第一个选项卡之外的每个选项卡,它在启动时自动选择而不执行(!)操作。有人有解决方案吗?

我不想使用onTabReselected方法,因为这会导致TabLayout的另一种行为。同时选择第二个选项卡并选择第一个选项卡也不是一个好方法。

祝你好运

5 个答案:

答案 0 :(得分:3)

我正在实现的自定义选项卡布局也遇到类似的问题,启动活动时,第一个选项卡不会以选定状态显示,但是启动时自动选择选项卡2,3,4 ...会出现。

对我有帮助的解决方案是在 @Override protected void onResume() { super.onResume(); mTabLayout.getTabAt(1).select(); mTabLayout.getTabAt(0).select(); } 中,迅速选择第二个标签,然后返回到第一个标签。

{{1}}

答案 1 :(得分:2)

我明白了。解决方案很简单,使用(一次)onTabReselected并覆盖那里的监听器。

tabLayout.setOnTabSelectedListener(new OnTabSelectedListener() {

    @Override
    public void onTabSelected(Tab tab) {
        selectTab(tab);
    }

    private void selectTab(Tab tab) {
        // do something                 
    }

    @Override
    public void onTabReselected(Tab tab) {
        if (tab.getPosition() == 0) {
            selectTab(tab);

            tabLayout.setOnTabSelectedListener(new OnTabSelectedListener() {

                @Override
                public void onTabSelected(Tab tab) {
                    selectTab(tab);
                }

                @Override
                public void onTabReselected(Tab arg0) {                             
                }

                @Override
                public void onTabUnselected(Tab arg0) {                             
                }
            });

        }
    }


    @Override
    public void onTabUnselected(Tab tab) {
    }

});

答案 2 :(得分:0)

当您尝试在语法上选择第一个选项卡时,您的视图初始化未完成。使用句柄并等到100ms然后尝试选择标签。

onCreate()

中试试这个
new Handler().postDelayed(
    new Runnable(){
        @Override
        public void run() {
            tabLayout.getTabAt(startSelection).select();
        }
}, 100);

答案 3 :(得分:0)

我有更简单的解决方案

tabLayout.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener {
  private var alreadyReselected = AtomicBoolean(false)

  override fun onTabReselected(tab: TabLayout.Tab) {
    if  (tab.position == 0 && !alreadyReselected.getAndSet(true)) onTabSelected(tab)
  }
  override fun onTabUnselected(tab: TabLayout.Tab?) {}

  override fun onTabSelected(tab: TabLayout.Tab) {
    //do whatever you want on first selection
  }
})

答案 4 :(得分:0)

使用添加自定义标签也可以实现这一点 带有 2 个参数的 TabLayout 的 addTab() 方法,例如

//第一个参数标签 //第二个参数 setSelected

tabLayout.addTab(tab, true/false)

//例子

for (item in tabsList) {
            var tab = tabLayout.newTab()
            tab.text = item.name
            if (conditions for selections) {
                tabLayout.addTab(tab, true)
            } else {
                tabLayout.addTab(tab, false)
            }
        }