1

前段时间我问了一个问题:

替换片段不起作用/我是否以正确的方式执行此操作?

因为我很难理解整个概念。过去的 Google I/O 视频也有所帮助,但我仍然没有真正使用片段的理由。我又遇到了我的问题,通过更多的搜索和 Google I/O 2013 视频,我又遇到了另一个岔路口。在开始赏金以获得关于这个主题的更专家意见后,我被引导使用 FrameLayouts,但在这个 I/O 13 视频中 19:05 进入它显示的视频<fragment>。有人可以澄清我的任何差异或误解吗?

我使用<fragment>or<frameLayout>吗?如果您查看我的原始问题以了解我来自哪里,则可以加分。

4

1 回答 1

4

我在这里看到了 2 个单独的问题;(1)什么是<fragment>元素?(2) 我(意思是你)是否通过使用FrameLayout? 以最好的方式做我在上一个问题中尝试做的事情。

我将尝试回答这两个问题。

<fragment>XML 标记只是实现片段的另一种方式。作为复习,aFragment就像活动的一部分。但是,它是一个独立的类,请参考片段文档,因为 aFragment旨在模块化,所有片段必须容纳在单独的FragmentActivity. 把它想象FragmentActivity成一个容器。通过将您加载Fragment到 中FragmentActivityFragmentActivity可以提供Fragment该类本身无法访问的其他有价值的功能。它还为您提供了动态交换片段的机会,从而提供更灵活的用户体验。

如何将您的内容加载Fragment到其包含FragmentActivity取决于您要完成的内容。一种方法是使用<fragment>标签。使用这种方法,不是像在之前的问题中那样在Fragment活动 java 代码中声明 ,然后用 a 加载它,而是通过包含.FragmentTransactionFragmentFragmentActivity

<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在必要时替换它们更有意义。

根据您之前的问题和动态交换片段的需要,我认为您为该实现做出了正确的选择。

于 2013-05-21T20:32:00.513 回答