我在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中询问了这一点。)
答案 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 属性用于查找我们通常包含在静态片段中的片段类。
希望这会有所帮助.. 感谢