【问题标题】:handle back button in single fragment处理单个片段中的后退按钮
【发布时间】:2015-05-12 12:37:53
【问题描述】:

我有一个带有导航抽屉的应用程序。当我启动应用程序时,我在主屏幕(屏幕 A)上看到的是“hello world”,然后当我从导航抽屉中选择一个项目时,我加载一个片段并获得“new hello world”,然后当我选择一个导航抽屉中的项目,我加载一个片段并获得“你好宇宙”。但由于这一切都是通过 1 个片段发生的,所以当我按下设备后退按钮时,我应该得到如下片段:

“hello world”>后退>“新的hello world”>后退>“hello world”

我该如何处理?

注意:

在更改我尝试过的片段时

fragmentManager.beginTransaction().replace(R.id.mainContent, fragment).commit();

然后我改为:

fragmentManager.beginTransaction().add(R.id.mainContent, fragment).addToBackStack("tag").commit();

但没有任何效果。该应用程序在按下后退按钮时退出。 是不是因为同一个片段一次又一次地被另一个内容替换?

【问题讨论】:

    标签: android android-fragments navigation-drawer


    【解决方案1】:

    您尝试的第二种方法是正确的。尝试通过覆盖onBackPressed() 方法在BackPressed() 上调用popBackStack()

     @Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() > 0) {
            getFragmentManager().popBackStack();
        } else if (getFragmentManager().getBackStackEntryCount() == 0) {
            super.onBackPressed();
        }
    }
    

    【讨论】:

      【解决方案2】:

      我认为您需要通过调用 addToBackStack 将片段添加到 backstack,如下所示:

      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
      if (fragmentManager.findFragmentByTag("MainFragment") == null) {
          fragmentTransaction.add(R.id.content_frame, fragment, "MainFragment");
      } else {
          fragmentTransaction.replace(R.id.content_frame, fragment, "MainFragment");
          fragmentTransaction.addToBackStack("Fragment" + position);
      }
      fragmentTransaction.commit();
      

      和覆盖 OnBackPressed():

      @Override
      public void onBackPressed() {
          if (getFragmentManager().getBackStackEntryCount() > 0 ){
              getFragmentManager().popBackStack();
          } else {
              super.onBackPressed();
          }
      }
      

      【讨论】:

      • 没用。我按照你的建议工作,然后从抽屉中选择项目,然后我再次从抽屉中选择另一个项目。现在,当我按下返回键时,什么也没有发生。然后当我按下返回键时,应用程序退出。 :(
      【解决方案3】:

      使用方法 addToBackStack 和 popBackStack 来处理片段的返回按钮这里是示例

          ft.replace(R.id.simple_fragment, newFragment);
          ft.addToBackStack("tag");
          ft.commit();
      

      返回按钮

      FragmentManager fm = getSupportFragmentManager();
      if (fm.getBackStackEntryCount() > 0) {
          fm.popBackStack();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多