添加片段后,前一个片段仍然可见

时间:2013-05-29 06:24:59

标签: android android-activity fragment

首先,我使用方法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();

5 个答案:

答案 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();

此处ftsFragmentTransaction在顶部定义的对象。