如何在没有View的情况下添加已经添加的片段后告诉片段

时间:2016-03-01 10:05:00

标签: java android android-fragments

您好我有以下情况:

我添加了一个没有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}

3 个答案:

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