我有一段代码,我希望隐藏当前片段,这样它就不会破坏它的视图,然后使用它显示一个新的:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.hide(oldFragment);
ft.show(newFragment);
ft.commit();
问题在于,当我执行上面的代码时,它不会显示任何UI组件。
如果我做ft.replace(id,fragment);
它有效,但我不想删除以前显示的片段,因为我想维护片段及其视图,所以我不需要重新初始化它
答案 0 :(得分:1)
您之前是否已将newFragment
添加到Activity
视图层次结构的某些部分?如果您只是实例化一个Fragment
并告诉它显示,它将不知道在哪里显示(除非它是DialogFragment
,我猜)。您需要为add(somelayoutid,fragment,"sometag")
使用Fragment
,然后您可以根据需要隐藏/显示它们。如果你不需要隐藏你的Fragment
,你也可以继续使用替换,而不是隐藏/显示。
“sometag”会非常有用,因此您可以在重新创建Fragment
之后检索每个Activity
的引用,然后您可以像以前一样隐藏/显示它们。 / p>
答案 1 :(得分:1)
在调用此片段之前,您的片段是否已初始化?
if (newFragment == null) {
// If not, instantiate and add it to the activity
ft.add(yourFragmentContainerId, newFragment,"tag");
} else {
// If it exists, simply attach it in order to show it
ft.show(newFragment);
}