【问题标题】:Back from fragment to Activity onBackPressed从片段返回到 Activity onBackPressed
【发布时间】:2015-01-30 20:01:44
【问题描述】:

我的问题是,我有一个活动和一个片段,从活动中打开该片段,但是当我按下返回按钮时它关闭应用程序。 我试试这段代码。

用于打开的片段。

 case R.id.button_contact:
         Fragment fragment = new FragmentContact();
                FragmentManager fragmentManager =  getSupportFragmentManager();
                fragmentManager.beginTransaction().replace(R.id.frame_container,fragment).addToBackStack("Frag1").commit();
                break;

返回按钮。

 @Override
    public void onBackPressed() {
        getSupportFragmentManager().popBackStackImmediate("Frag1",0);
        super.onBackPressed();
    }

【问题讨论】:

  • 注释掉super.onBackPressed();
  • 删除 getSupportFragmentManager().popBackStackImmediate("Frag1",0);会更好,因为您已经将片段添加到 backstack 并且按下返回按钮时它将自动从 backstack 中弹出

标签: android android-fragments


【解决方案1】:

我假设您只想删除片段并保留活动?

在这种情况下,将您的 onBackPressed 方法修改为

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().findFragmentByTag("Frag1") != null) {
        getSupportFragmentManager().popBackStackImmediate("Frag1",0);
    } else {
        super.onBackPressed();
    }
}

如果添加了片段,这将从活动中删除片段,如果没有,则返回按钮将正常工作并销毁活动。

【讨论】:

    【解决方案2】:

    只需从 onBackPressed() 中删除这一行。

      getSupportFragmentManager().popBackStackImmediate("Frag1",0);
    

    它的工作。

    【讨论】:

      【解决方案3】:

      你可以做这样的事情。它适用于您的堆栈:

      if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
        super.onBackPressed();
      } else {
        getSupportFragmentManager().popBackStack();
      }
      

      如果有任何片段,这段代码将弹出堆栈。否则返回按钮将关闭活动

      【讨论】:

        【解决方案4】:

        这两行在做什么:

        1). getSupportFragmentManager().popBackStackImmediate("Frag1",0);
            As you are adding you fragment in activity backstack, so when you are calling on back press,
            it remove fragment from stack, now in your stack activity is left, means stack size is one.
        
        2). super.onBackPressed();
        I think you  are aware of calling super.onbackpress funcionality, here it will finish
         your activity and stack size is 0 now, and app will close immidately if stack size is 0.
        

        所以你必须去掉 super.onbackpress() 方法。

        【讨论】:

          猜你喜欢
          • 2014-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-22
          相关资源
          最近更新 更多