如何停止按回按钮返回活动中打开的每个片段?

时间:2011-08-21 15:35:10

标签: android fragment

我使用它来根据设备的屏幕大小启动新片段。

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();
    }

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

我该怎么做?

3 个答案:

答案 0 :(得分:8)

如果您不想浏览每个片段,请从您的交易中删除addToBackStack(null)。函数调用addToBackStack(null)是将片段添加到后栈的指令。

修改

我不知道从后台堆栈中删除所有Fragment的任何简单方法。在我的头脑中,我建议:

  1. 将呼叫保留在addToBackStack(null)中,以便将所有片段添加到后台堆栈
  2. 覆盖您的活动的onBackPressed()方法并使用popBackStack()弹出所有碎片
  3. 查看popBackStack()的{​​{3}},看起来有一些不错的功能可以帮助您:

      

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

      

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

答案 1 :(得分:0)

似乎你想要addToBackStack(null)来添加第二个细节片段,但是没有addToBackStack(null)来添加第一个列表片段。你有第一个FragmentTransaction的addToBackStack(null)吗?

答案 2 :(得分:0)

在我的应用竞赛中,我有同样的问题,在按下时我正在移动到之前的片段。 但我想关闭背面的应用程序,所以我做的是。

@Override
public void onBackPressed() {
    finish();
   // super.onBackPressed();
}