我正在用以下命令销毁以编程方式创建的片段:
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>
如果然后我在mainactivity中再次从同一类创建一个片段:
getSupportFragmentManager().beginTransaction() .add(R.id.result_bar, testinstance) .commit();
然后onCreate似乎不再被调用(该片段只是空的)。我在这里做错了什么?谢谢。
FrameLayout
根据有关共用布局的Google文档以及LinearLayout,RelativeLayout和AbsoluteLayout有什么区别的答案?中,ViewGroup为s LinearLayout,RelativeLayout,AbsoluteLayout (decrepated) ,TableLayout等被允许显示的观点:
ViewGroup
LinearLayout
RelativeLayout
AbsoluteLayout
TableLayout
FrameLayout通过 重叠 显示视图。通常用于 包含 布局:
“框架布局是Android开发人员用来组织视图控件的最简单,最有效的布局类型之一。与其他一些布局相比,它们的使用频率更低,原因仅在于它们通常仅用于显示一个视图或重叠的视图。框架布局通常用作容器布局,因为它通常只有一个子视图(通常是另一个布局,用于组织多个视图)。”
来源: FrameLayout MobilTuts
“框架布局允许开发人员在框架布局中仅显示单个或多个UI元素,但是每个元素将基于屏幕的左上角放置,并且重叠的元素将重叠显示。”
来源: 绝对初学者的Android框架布局
Fragment
FrameLayout的Google文档说:
“ FrameLayout旨在挡住屏幕上的某个区域以显示单个项目。”
FrameLayout将托管一个 布局 ,并且愿意这样做。其余ViewGroup的仅显示视图。你可以做一个Fragment在所有ViewGroup小号 (我测试了一下,这是一个惊喜对我来说) ,但它不会以适当的方式来做到这一点。这些FrameLayout是:
“ …当您要重叠视图时,通常选择的布局。”
如果您使用创建一个布局<fragment .../>,则您的片段将不会被另一个替换,因为它会显示出来,因此它的ID将“附加”在视图上。要替换片段,您需要对其进行托管: “通过将片段封装在FrameLayout中,您可以仅替换细节” (请参见此答案)。
<fragment .../>
然后,请记住FrameLayouts是空的,可以托管 布局 。Fragments(来自Google的Fragment Documentation,它非常简单地说明了如何使用片段的事实),当它们在xml中声明时,它们必须具有一个附加的类(一个id),该类不能被替换。 这就是为什么我们需要一个 容器 来承载此片段并使活动视图 重叠 !
希望这会有所帮助。
注意:如果有人要编辑此答案,但由于无法解释或解释不正确,则可以由衷地进行。