我该如何从XML定义一个片段的布局?

21

我正在尝试以与视图布局相同的方式在XML中定义片段的布局。

这可能吗?我尝试了几种方法,但似乎都不起作用。

我的活动布局如下(main.xml):

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
  <fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="full.lommeregner.Lommeregnerrv2Activity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lommeregnerv2">
    </fragment>   

</ListView>

现在,由于我不是通过 Java 代码生成布局的忠实粉丝,因此我尝试按以下方式定义我的片段(fragment_lommeregner.xml):

  <fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="full.lommeregner.Lommeregnerrv2Activity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lommeregnerv2">
       <!-- my content was located here (some textviews, buttons and so on). -->
    </fragment> 

我做错了什么?我如何通过XML定义片段的布局?

2个回答

16
一个Fragment很像一个activity,需要一个Java类文件来搭配。你不能仅仅通过创建一个Fragment布局来创建一个Fragment - 你需要为你的Fragment创建一个类:
  1. 为你的Activity创建一个布局XML和一个Activity子类
  2. 为你的Fragment创建一个布局XML和一个Fragment子类
  3. 在你的Activity布局XML中将两者联系在一起(或者使用FragmentTransaction如果你想在Java代码中完成它)
如果你还没有这样做,请阅读、反复阅读并消化这个页面上的所有内容:https://developer.android.com/guide/components/fragments.html 那里有很多内容,但是Fragments现在是Android应用程序的重要组成部分,因此必须阅读。好消息是,Fragments的基础知识非常简单。

2
它们并不是严格必需的,但在许多情况下它们会让你的生活更加轻松。 - adamp
目前自动生成的Eclipse示例使用FragmentTransactions,视图由静态片段类生成并从功能调用中返回。我正在研究如何添加自己的选项卡。 - fIwJlxSzApHEZIl
Fragment类的实例如何指定包含其布局的XML文件? ActivitysetContentView(R.layout.my_activity_layout),可以在onCreate()期间调用。是否有类似于片段的模拟? - dinosaur

13

只需将其添加到您的<fragment>标记中作为属性:

tools:layout="@layout/your_layout_xml"

在您的main.xml中(或<fragment>标签容器),将其放入父容器中(在此示例中为ListView):

xmlns:tools="http://schemas.android.com/tools"

2
tools:layout 只用于编辑器预览,与实际使用的布局无关。 - David
尽管这个答案与OP的问题没有直接关系,但它对我的工作肯定是有帮助的。谢谢! - Daniel James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接