Java Android:remove()片段-->;add()再次添加同一类的新片段->;是否未调用onCreateView和onActivityCreated?

Java Android:remove()片段-->;add()再次添加同一类的新片段->;是否未调用onCreateView和onActivityCreated?,java,android,android-fragments,fragmentmanager,Java,Android,Android Fragments,Fragmentmanager,我正在销毁一个以编程方式创建的片段: getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.test)).commit(); 这在xml文件中确定,如下所示: <LinearLayout android:id="@+id/test" android:orientation="horizontal" android:layout_width=

我正在销毁一个以编程方式创建的片段:

getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.test)).commit();
这在xml文件中确定,如下所示:

<LinearLayout
    android:id="@+id/test"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

</LinearLayout>
然后onCreate似乎不再被调用(片段只是空的)。我做错了什么?谢谢。

说明:为什么要为片段设置框架布局 什么是框架布局: 根据的回答,
视图组
s作为
线性布局
相对布局
绝对布局
(已解除分离),
表格布局
等允许显示视图:

  • LinearLayout:“逐个显示视图”
  • RelativeLayout:“显示与其他视图相关的视图”
  • TableLayout:“在表格中显示视图”
    等等
  • FrameLayout
    按重叠显示视图。它通常用于包含布局:

    “框架布局是Android开发者用来组织视图控件的最简单、最有效的布局类型之一。与其他一些布局相比,它们的使用频率较低,这仅仅是因为它们通常仅用于显示一个视图或重叠的视图。框架布局通常用作容器布局,因为它通常只有一个子视图(通常是另一个布局,用于组织多个视图)。”

    资料来源:

    框架布局允许开发人员在框架布局中仅显示单个或多个UI元素,但每个元素将基于屏幕左上角定位,重叠的元素将重叠显示

    资料来源:

    好的,但是,为什么我需要这个用于
    片段
    ?(vs LinearLayout或) 报告说:

    “FrameLayout设计用于在屏幕上屏蔽一个区域以显示单个项目。”

    FrameLayout
    将承载一个布局,它愿意这样做。而
    ViewGroup
    s的其余部分只显示视图。您可以在所有
    ViewGroup
    s中创建一个
    片段(我测试过,这对我来说是一个惊喜),但这不是一个正确的方法。
    FrameLayout
    是:

    “…要重叠视图时选择的常规布局。”

    如果您使用
    创建布局,您的片段将不会被另一个替换,因为它显示在视图中,并且在视图上以其id“附着”。要替换片段,您需要承载它:“通过将片段封装在FrameLayout中,您可以仅替换细节”(请参阅)

    然后,请记住,
    FrameLayout
    s是空的,可以承载一个布局
    片段(,它非常简单地解释了如何使用片段的事实),当它们以xml声明时,它们必须附加一个类(一个id),不能被替换。
    这就是为什么我们需要一个容器来承载这个片段,并重叠活动视图的原因

    希望这会有帮助


    注意:如果有人想编辑这个答案,因为它没有解释或解释得不好,她/他可以尽情地解释。

    我认为你应该尝试使用
    FrameLayout
    而不是LinearLayout。并删除
    android:visiblity=“gone“
    因此,您的布局将不会显示。否。添加新碎片时,我将可见性再次设置为可见。是否尝试使用FrameLayout?顺便问一下,为什么不使用
    replace()
    而不是
    remove()+add()
    ?嗯(我的错误…),LinearLayout似乎也包含一个片段。作为所有的查看组,我想。谢谢你的评论。出于某种原因,它与framelayout一起工作
    getSupportFragmentManager().beginTransaction()
                .add(R.id.result_bar, testinstance)
                .commit();