您好我有以下情况:
我添加了一个没有UI的片段来做一些背景工作
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(btFragment, "btFragmentAsBackgroundWorker");
ft.commit();
添加后,它不会显示给用户。所以它完美无缺。但有时用户可以访问该片段来更改某些内容,因此我必须使用UI进行显示。
为了展示它我像这样使用它
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.remove(menuFragment).show(btFragment);
ft.commit();
但显然没有View膨胀。我怎样才能做到这一点?
我尝试了这个,但是我收到了错误
ft.remove(menuFragment).add(R.id.fragmentMenu, btFragment);
错误:
java.lang.IllegalStateException: Fragment already added: BTFragment{5c942bb #1 id=0x7f0c0072 btFragmentAsBackgroundWorker}
答案 0 :(得分:0)
按以下方式更改您的代码....
添加没有视图的片段
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(btFragment, "btFragmentAsBackgroundWorker");
ft.commit();
添加视图
ft.replace(R.id.fragmentMenu,btFragment);
ft.commit();
答案 1 :(得分:0)
创建视图是片段生命周期的一部分,并且不能真正推迟。我建议您至少在ViewGroup
中创建一个空容器onCreateView()
。然后,您可以稍后向容器添加视图。
或者,考虑创建一个可见度GONE
的视图,并在准备好显示用户界面时将其设置为VISIBLE
。
答案 2 :(得分:0)
要添加没有UI的片段,请从活动中添加片段 使用add(Fragment,String)(提供一个唯一的字符串" tag" for 片段,而不是视图ID)。这会添加片段,但是,因为 它没有与活动布局中的视图相关联,但它没有 接到onCreateView()的调用。所以你不需要实现它 方法
为片段提供字符串标记并非严格用于非UI 片段 - 您还可以为具有片段的片段提供字符串标签 UI-但如果片段没有UI,那么字符串标签就是 唯一的方法来识别它。如果你想从中获取片段 稍后,你需要使用findFragmentByTag()。