我使用它来根据设备的屏幕大小启动新片段。
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();
}
问题是当用户按下后退按钮时,它会返回到在活动生命周期中打开的每个片段。我怎么能在不这样做的地方做到这一点?我只是希望它在第一次按下时删除片段,然后在第二次点击时返回到以下活动。
我该怎么做?
答案 0 :(得分:8)
如果您不想浏览每个片段,请从您的交易中删除addToBackStack(null)
。函数调用addToBackStack(null)
是将片段添加到后栈的指令。
修改强>
我不知道从后台堆栈中删除所有Fragment的任何简单方法。在我的头脑中,我建议:
addToBackStack(null)
中,以便将所有片段添加到后台堆栈onBackPressed()
方法并使用popBackStack()
弹出所有碎片查看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();
}