活动布局:片段类:vs android:name属性

时间:2012-04-15 14:40:37

标签: android android-fragments android-xml xml-attribute

我在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:name class:是否可以互换?如果我在Eclipse中使用自动完成功能,它们都会显示相同的文档提示(即该属性提供要实例化的类名)。当要实例化的类具有与java文件名不同的名称时,可能必须使用第二个名称,例如 FragmentLayout.java 文件中的 TitlesFragment ?或者我可以使用语法 package.fileDOTjava $ Class 以及 android:name 属性吗?

我想为Android Java Classes提供一些XML标签和属性的文档(我在另一个question中询问了这一点。)

3 个答案:

答案 0 :(得分:41)

正如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);
}

这似乎意味着程序首先看起来是“类”属性。失败时看起来是“名字”属性。 因此,如果效率更高,使用“类”是真的。

答案 1 :(得分:23)

  

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

据推测,是的。我只使用了class,这似乎是Google大多数示例使用的内容,但我确实看到了他们在某些示例中使用android:name的位置。遗憾的是,<fragment>没有正式和完整的文档。

答案 2 :(得分:0)

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

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