我回答了一个问题:
Replacing Fragments isn't working/Am I executing this the proper way?
因为我很难将整个概念包裹起来。过去的Google I / O视频也有所帮助,但我仍然没有理由使用片段。我再次遇到了我的问题,通过更多的搜索和Google I / O 2013视频,我又遇到了另一个问题。在开始赏金以获得关于此主题的更专家意见之后,我被引导使用FrameLayouts,但是在此I / O 13视频中19:05进入video它显示<fragment>
。有人可以澄清我的任何不满或误解吗?
我使用<fragment>
还是<frameLayout>
?如果你看看我原来的问题,知道我来自哪里,可以获得奖励。
答案 0 :(得分:4)
我在这里看到两个单独的问题; (1)<fragment>
元素是什么? (2)我(意思是你)使用FrameLayout
以尽可能最好的方式做我在上一个问题中尝试做的事情。
我会尽力回答这两个问题。
<fragment>
XML标记只是实现片段的另一种方式。作为复习,Fragment
就像活动的一部分。这是一个独立的类,但是,回顾fragment documentation,因为Fragment
旨在模块化,所有片段必须位于单独的FragmentActivity
内。将此视为FragmentActivity
作为容器。通过将Fragment
加载到FragmentActivity
,FragmentActivity
可以提供Fragment
类无法自行访问的其他有价值的功能。它还为您提供动态交换片段的机会,从而提供更灵活的用户体验。
如何将Fragment
加载到其包含的FragmentActivity
中取决于您要尝试完成的内容。一种方法是使用<fragment>
标记。使用这种方法,不是像在前面的问题中那样在活动java代码中声明Fragment
然后用FragmentTransaction
加载它,而是通过XML布局加载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 docs的例子中看到这里声明的片段。然后,当FragmentActivty
被调用setContentView()
时,onCreate
加载该片段。
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);
}
}
显示片段的另一种方式就像您在前面的示例中所做的那样。使用FragmentManager
,您可以创建Fragment
类的新实例,并在java代码中以编程方式加载它。
那么哪种技术有意义呢?作为来自android docs demonstraits的示例,当您使用静态片段时,XML片段方法是有意义的,即您不会动态地交换片段。这是因为您无法像在java代码中那样编辑动态创建的XML布局。另外,从我所知道的,使用XML方法将片段更像是用于不同控制的布局元素。在android示例中,他们使用XML方法在平板电脑上并排显示2个fragmens。通过控制片段更像布局元素,例如,能够调整layout_weight
你可以为此目的取得更好的结果。
但是,如果您正在设计一个高度动态的用户体验,例如使用ViewPager
或其他一些片段将定期轮换的功能,那么使用单独的Fragment
类并替换那些{更有意义{1}}因为它们变得必要。
根据您之前的问题以及动态交换片段的需要,我认为您为该实施做出了正确的选择。