4

我正在使用它来根据设备的屏幕尺寸启动一个新片段。

FragmentManager fragMgr = getSupportFragmentManager();
        releaseInfoFragment release = (releaseInfoFragment)fragMgr.findFragmentById(R.id.release);

            release = releaseInfoFragment.newInstance(url);
            FragmentTransaction xaction = fragMgr.beginTransaction();
            xaction.replace(R.id.release, release)
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            .addToBackStack(null)
            .commit();
    }

问题是当用户按下返回按钮时,它会返回到在活动生命周期中打开的每个片段。我怎样才能使它不这样做?我只希望它在第一次按下后删除片段,然后在第二次单击时返回到以下活动。

我该怎么做呢?

4

3 回答 3

8

如果您不想返回每个 Fragment,addToBackStack(null)请从您的事务中删除。函数调用addToBackStack(null)是将 Fragment 添加到后堆栈的指令。

编辑

我不知道有什么简单的方法可以从后堆栈中删除所有片段。在我的头顶,我建议:

  1. 将调用保留在addToBackStack(null)in 以便将所有 Fragment 添加到后堆栈
  2. 覆盖您的 ActivityonBackPressed()方法并用于popBackStack()弹出所有片段

查看Android 文档popBackStack()似乎有几个不错的功能可以帮助您:

POP_BACK_STACK_INCLUSIVE:popBackStack(String, int) 和 popBackStack(int, int) 的标志:如果设置,并且已提供后退堆栈条目的名称或 ID,则将消耗所有匹配条目,直到不匹配的条目找到或到达堆栈的底部。

popBackStack(int id, int flags) 弹出所有返回堆栈状态,直到具有给定标识符的状态。

于 2011-08-21T15:44:53.130 回答
0

似乎您希望 addToBackStack(null) 用于添加第二个详细信息片段,但没有 addToBackStack(null) 用于添加第一个列表片段。你在第一个 FragmentTransaction 上有 addToBackStack(null) 吗?

于 2012-01-18T01:38:40.387 回答
0

在我的应用程序竞赛中,我在按下时遇到了同样的问题,我正在移动到上一个片段。但我想在后按时关闭应用程序,所以我所做的是。

@Override
public void onBackPressed() {
    finish();
   // super.onBackPressed();
}
于 2016-07-12T11:47:32.840 回答