我有一个包含子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
答案 0 :(得分:1)
试试这个:
Fragment swipe = getChildFragmentManager().findFragmentByTag("swipe");
if (swipe == null){
throw new RuntimeException("Nope");
}
getChildFragmentManager().beginTransaction().remove(swipe).commit();
getChildFragmentManager().popBackStack();
答案 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。
那是一个讨厌的人。谢谢你的帮助!