删除ChildFragmentManager无法按预期方式工作

时间:2016-06-02 11:26:52

标签: android android-fragments fragmentmanager

我有一个包含子Fragment的父Fragment,其中显示了一些数据。

在某些时候,Child Fragment广播用户已完成(没有数据显示)。在这一点上,我想删除这个无用的片段,但我不知何故不成功。我错过了什么吗?

将>片段添加到容器中的方式(并且效果非常好):

if (swipeFragment == null)
    swipeFragment = new SwipeViewFragment();
if (getActivity() != null) {
    getChildFragmentManager().beginTransaction().add(R.id.jobSearchContainer, swipeFragment, "swipe").commitAllowingStateLoss();
    status = SWIPE;
}

我计划删除的方式(但它不起作用,这是我尝试的所有变体):

Fragment swipe = getChildFragmentManager().findFragmentByTag("swipe");
if (swipe == null){
    throw new RuntimeException("Nope");
}
getChildFragmentManager().beginTransaction().remove(swipe).commit();
getChildFragmentManager().beginTransaction().hide(swipe).commit();
getChildFragmentManager().popBackStack();
getFragmentManager().beginTransaction().remove(swipe).commit();

我遗失了什么?

由于

PS:当我说它不起作用时:我的意思是片段没有被删除,我在logcat中没有输出

更新

    Fragment swipe = getChildFragmentManager().findFragmentByTag("swipe");
    if (swipe == null){
        throw new RuntimeException("Nope");
    }
    Log.d("DEBUG", ""+getChildFragmentManager().getFragments().size());
    getChildFragmentManager().beginTransaction().remove(swipe).commit();
    getChildFragmentManager().popBackStack();
    Log.d("DEBUG", ""+getChildFragmentManager().getFragments().size());

有结果:

1
1

2 个答案:

答案 0 :(得分:1)

试试这个:

Fragment swipe = getChildFragmentManager().findFragmentByTag("swipe");
if (swipe == null){
    throw new RuntimeException("Nope");
}

getChildFragmentManager().beginTransaction().remove(swipe).commit();
getChildFragmentManager().popBackStack();

Reference

答案 1 :(得分:0)

我调试了它,我终于找到了它的全部内容,我很抱歉它与我发布的代码无关。不过,这很有意思!

问题出现在视图的onCreateView中:

以前是这样的:

View v = inflater.inflate(R.layout.swipe_layout, container);
// Bla bla
return null;

这是一个问题,因为我认为片段在某种程度上与视图无关......但它完美地运作,因为视图使用容器,一切都很好

相反,请使用:

View v = inflater.inflate(R.layout.swipe_layout, container, false);
// Bla bla
return v;

如果你这样做,一切都很好!

我检测到了这个问题,因为我试图让视图变得透明,我调用了Fragment.getView(),这使我返回了null。

那是一个讨厌的人。谢谢你的帮助!