选择一个选项卡而不调用OnTabSelectedListener

时间:2016-05-19 23:50:03

标签: android android-tablayout

我正在尝试在我的Activity中使用TabLayout。每个Tab都会将用户带到一个片段。

  1. 假设用户在Tab1上有fragment1。
  2. 他点击了包含fragment2的Tab2。
  3. 现在,当用户在Tab2上并按下后退按钮时,我希望用户返回Tab1上的Fragment1。我这样做getFragmentManager().popBackStack()。现在我还要将选定的标签更新为Tab1。
  4. 有没有办法在不调用TabSelectedListener的情况下在TabLayout中选中标签?

2 个答案:

答案 0 :(得分:3)

只需这样做:

TabLayout.Tab tab = tabLayout.getTabAt(index);

tabLayout.removeOnTabSelectedListener(this);
tab.select();
tabLayout.addOnTabSelectedListener(this);

享受:)

答案 1 :(得分:1)

无论您在onTabSelected中运行的代码是什么,都可以转移到自定义方法中,并且可以在活动中保持活动的标签状态。

  1. 为当前有效的标签位置添加字段
  2. 创建onTabSelected(int position, boolean update)方法。传递false作为第二个参数会绕过您正在寻找的任何逻辑,以避免在以编程方式选择选项卡时运行。
  3. 在致电tab.select()以更新TabLayout之前,请致电onTabSelected(position, false)以更新您在第一步中创建的有效标签字段,但不运行标签选择逻辑。然后当TabSelectedListener触发时,它会短路,因为activeTabPosition字段已经设置为更新后的位置。
  4. 这是新方法的骨架。

        private void onTabSelected(int position, boolean update) {
            if (position == activeTabPosition) {
                return;
            }
    
            activeTabPosition = position;
            if (update) {
                // Your tab selected logic
            }
        }