首先,我使用方法replace
将片段添加到后台堆栈,然后我发现当我按下后退键时,堆栈中的片段将再次调用onCreateView
,我也发现这个行为在api演示中,所以我认为这不是一个bug,但我希望达到像活动一样的效果,当我
按后退键,上一个活动不会调用onCreate
方法。
后来我发现fragmentManager.add()
可以实现我的想法,但是当添加第二个片段时,出现了另一个问题,前一个片段仍然可见。
有人可以帮助我吗?
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction2 = manager.beginTransaction();
transaction2.add(R.id.fl, f2);
transaction2.addToBackStack("Fragment2");
transaction2.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction2.commit();
答案 0 :(得分:2)
尝试使用“替换”而不是“添加”
代码的一部分
fragmenttransaction.replace(R.id.realtabcontent, Fragment);
fragmenttransaction.commit();
答案 1 :(得分:1)
回到使用替换,只需添加一个检查以查看该包是否为空。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
if (savedInstanceState == null) {
// do work
// If the view is being recreated this code won't run
}
...
}
答案 2 :(得分:1)
检查您是否为片段设置了argb背景。在这种情况下,用rgb替换该背景。 a意味着透明。
答案 3 :(得分:0)
尝试使用
manager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
在添加新FragmentTransaction
之前
见here
答案 4 :(得分:0)
如果您是第一次添加片段,可以像在代码中一样添加片段。
Fragment_Home fragment = new Fragment_Home();
FragmentTransaction fts = (MainActivity.this).getSupportFragmentManager().beginTransaction();
fts.add(R.id.frame_container, fragment);
// fts.addToBackStack(fragment.getClass().getSimpleName());
fts.commit();
如果你想从此移动到其他片段,那么你应该用新的片段替换当前的片段。
Fragment_CreateGroup fragment = new Fragment_CreateGroup();
fts = (MainActivity.this).getSupportFragmentManager().beginTransaction();
// fts.addToBackStack(fragment.getClass().getSimpleName());
fts.replace(R.id.frame_container, fragment);
fts.commit();
此处fts
是FragmentTransaction
在顶部定义的对象。