68

我已经阅读了 Android 开发人员指南中有关Fragments的文档,并且我看到有时他们指定要使用 Fragment 标签属性android:name实例化的类,有时他们使用class:属性:

<fragment
    android:name="com.example.news.ArticleReaderFragment"
    android:id="@+id/viewer"
    android:layout_weight="2"
    android:layout_width="0dp"
    android:layout_height="match_parent" />

<fragment
    class="com.example.android.apis.app.FragmentLayout$TitlesFragment"
    android:id="@+id/titles" 
    android:layout_weight="1"
    android:layout_width="0px" 
    android:layout_height="match_parent" />

android:nameclass:可以互换吗?如果我在 Eclipse 中使用自动完成功能,它们都会显示相同的文档提示(即属性提供要实例化的类名)。当要实例化的类的名称与java文件名不同时,也许您必须使用第二个,例如FragmentLayout.java文件中的TitlesFragment?或者我可以将语法package.fileDOTjava$Class也与android:name属性一起使用吗?

我想要一些关于 Android Java 类的 XML 标记和属性的文档(我已经在另一个问题中询问过它)。

4

3 回答 3

45

正如 Activity.onCreateView 源所说:

String fname = attrs.getAttributeValue(null, "class");
TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Fragment);
if (fname == null) {
    fname = a.getString(com.android.internal.R.styleable.Fragment_name);
}

这似乎意味着程序首先看起来“类”属性。并且在失败时看起来“名称”属性。因此,如果更有效的话,使用“类”是真的。

于 2012-12-19T10:43:43.450 回答
26

android:name 和 class: 可以互换吗?

大概,是的。我只使用class了 ,这似乎是大多数 Google 示例使用的,但我确实看到了它们android:name在某些示例中的使用位置。不幸的是,没有正式和完整的<fragment>.

于 2012-04-15T15:40:55.760 回答
0

抱歉,所有专家都在这里,我可能错了,但据我所知,当我们使用 fragmentManager 类的getFragmentByTag()方法时,片段的android:name属性用于查找片段。android:class属性也用于查找我们通常包含在静态片段中的片段类。

希望这会有所帮助..谢谢

于 2013-07-04T09:20:47.417 回答