1

我有一个选项卡式活动 1 到 5。如果我从 3 移动到 5,那么在后按时我想从 5 切换回 3,即在后按时我想回到上一个选项卡。请帮忙

4

2 回答 2

1

使用下面的代码来实现它。(代码也经过测试。)

1.初始化一个整数列表和一个布尔值;

private boolean isBackPressed = false;  
private boolean isBackPressedOnce = false;   
private List<Integer> tabsInBack = new ArrayList<>();

2.现在你的 onTabSelectedListener 必须像

tabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
      @Override
      public void onTabSelected(TabLayout.Tab tab) {
        if(!isBackPressed){
          tabsInBack.add(tab.getPosition());}
        else {
              isBackPressed = false;}              
      }

      @Override
      public void onTabUnselected(TabLayout.Tab tab) {

      }

      @Override
      public void onTabReselected(TabLayout.Tab tab) {

      }
    });

3(i).现在你的 onBackPressed() 函数必须是,(一个标签然后关闭)

    @Override
      public void onBackPressed() {
        isBackPressed = true;
        if (tabsInBack != null && tabsInBack.size() > 0) {
          if (tabs.getSelectedTabPosition() == tabsInBack.get(tabsInBack.size() - 1)) {
            tabsInBack.remove(tabsInBack.size() - 1);

          }
          if (tabsInBack != null && tabsInBack.size() > 0) {
            tabs.getTabAt(tabsInBack.get(tabsInBack.size() - 1)).select();
            tabsInBack.remove(tabsInBack.size() - 1);

          } else {
            super.onBackPressed();
          }
        } else {
          super.onBackPressed();
        }
      }

3(ii).现在你的 onBackPressed() 函数必须是,(返回所有选定的选项卡,然后关闭)

    @Override
      public void onBackPressed() {
        isBackPressed = true;
        if (tabsInBack != null && tabsInBack.size() > 0) {
          if (tabs.getSelectedTabPosition() == tabsInBack.get(tabsInBack.size() - 1)) {
            tabsInBack.remove(tabsInBack.size() - 1);

          }
          if (tabsInBack != null && tabsInBack.size() > 0) {
            tabs.getTabAt(tabsInBack.get(tabsInBack.size() - 1)).select();
            tabsInBack.remove(tabsInBack.size() - 1);
             if(isBackPressedOnce )
               {
                 super.onBackPressed();
               }
            else
               {
                 isBackPressedOnce = true;
               }
          } else {
            super.onBackPressed();
          }
        } else {
          super.onBackPressed();
        }
      }

让我知道它是否有帮助。

于 2017-11-29T13:14:34.477 回答
0

这对我有用 :) 它的工作原理与 whatsapp 完全一样

@Override public void onBackPressed() {

    //If first tab is open, then quit
    if (viewPager.getCurrentItem() == 0) {

        super.onBackPressed();
    }else {

        //If any other tab is open, then switch to first tab
        viewPager.setCurrentItem(0);
    }

}
于 2019-08-17T06:59:05.687 回答