我在这里看到了 2 个单独的问题;(1)什么是<fragment>
元素?(2) 我(意思是你)是否通过使用FrameLayout
? 以最好的方式做我在上一个问题中尝试做的事情。
我将尝试回答这两个问题。
<fragment>
XML 标记只是实现片段的另一种方式。作为复习,aFragment
就像活动的一部分。但是,它是一个独立的类,请参考片段文档,因为 aFragment
旨在模块化,所有片段必须容纳在单独的FragmentActivity
. 把它想象FragmentActivity
成一个容器。通过将您加载Fragment
到 中FragmentActivity
,FragmentActivity
可以提供Fragment
该类本身无法访问的其他有价值的功能。它还为您提供了动态交换片段的机会,从而提供更灵活的用户体验。
如何将您的内容加载Fragment
到其包含FragmentActivity
取决于您要完成的内容。一种方法是使用<fragment>
标签。使用这种方法,不是像在之前的问题中那样在Fragment
活动 java 代码中声明 ,然后用 a 加载它,而是通过包含.FragmentTransaction
Fragment
FragmentActivity
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
android:name="com.example.android.fragments.HeadlinesFragment"
android:id="@+id/headlines_fragment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
您可以在取自 android 文档的示例中看到此处声明的片段。然后在调用FragmentActivty
时加载片段。setContentView()
onCreate
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);
}
}
显示片段的另一种方法与您在前面的示例中所做的一样。使用 aFragmentManager
您可以创建Fragment
类的新实例并在 java 代码中以编程方式加载它。
那么哪种技术在什么时候有意义呢?作为来自 android docs demostraits 的示例,当您使用固定片段时,XML 片段方法是有意义的,即您不是动态地交换片段进出。这是因为您无法像编辑 java 代码一样编辑动态创建的 XML 布局。此外,据我所知,使用 XML 方法将片段更像是允许不同控制的布局元素。在 android 示例中,他们使用 XML 方法在平板电脑上并排显示 2 个片段。通过控制片段更像是布局元素,例如具有调整的能力,layout_weight
您可以为此目的获得更好的结果。
但是,如果您正在设计一个高度动态的用户体验,例如使用ViewPager
片段将定期旋转的某个或其他一些功能,则使用单独Fragment
的类并Fragments
在必要时替换它们更有意义。
根据您之前的问题和动态交换片段的需要,我认为您为该实现做出了正确的选择。