5

起初,我使用该方法replace将片段添加到返回堆栈,然后我发现当我按下返回键时,堆栈中的片段会onCreateView再次调用,我在api演示中也发现了这种行为,所以我认为这不是一个错误,但我想达到类似活动行为的效果,即当我按下后退键时,前一个活动不会调用该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();
4

5 回答 5

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
    }
    ...
}
于 2013-05-29T06:50:51.660 回答
1

尝试使用“替换”而不是“添加”

部分代码

fragmenttransaction.replace(R.id.realtabcontent, Fragment); fragmenttransaction.commit();

于 2014-06-09T15:32:54.853 回答
0

检查您是否为片段设置了 argb 背景。在这种情况下,用 rgb 替换该背景。a 表示透明。

于 2014-10-13T10:08:43.973 回答
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();

ftsFragmentTransaction在顶部定义的对象。

于 2015-12-14T09:40:06.683 回答
-1

尝试使用

manager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

在添加新的之前FragmentTransaction 看到这里

于 2015-12-14T09:24:46.283 回答