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

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时,必须使用第二个选项?或者我是否也可以在android:name属性中使用语法package.fileDOTjava$Class

我想要一些XML标签和属性的文档,就像Android Java类一样(我在另一个问题中问过:链接)。

3个回答

46

根据 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);
}

这似乎意味着程序首先查找“class”属性。如果失败,则查找“name”属性。 因此,使用“class”更有效。

1
我刚刚检查了一下,Android Studio 2.0 提供的基本模板默认使用 name:xxx 属性。 - yask
在<fragment>中的android:name属性指定了要在布局中实例化的Fragment类。这是我在开发者网站上看到的定义。页面:链接 - Shibin Francis

26

android:name和class是否可互换?

应该是可以的。我只用过class,看起来大部分Google的示例也是这样使用的,但有些示例中他们使用android:name。不幸的是,关于<fragment>没有正式和完整的文档。


@spaaarky21:是的,我已经在所有地方都切换到了“android:name”。 - CommonsWare
1
在使用 IntelliJ IDEA 的最新布局编辑器(v13)中,使用名称属性而非类的额外优点是可以自动填充。 - rmirabelle
我们需要一个完全限定的类名吗?还是只需要 .ArticleReaderFragment - Kenny Worden
@Kenny:据我所知,它必须是一个完全限定的类名,但我最近没有尝试过裸类名。如果前导点符号的表示法有效,我会有点惊讶。 - CommonsWare
@CommonsWare Eclipse一直建议使用完全限定名...我想我只能用可行的方法了。但还是谢谢! - Kenny Worden
显示剩余2条评论

0

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

希望这可以帮助到您。 谢谢


1
根据此页面的说明,他们使用android:tag属性来实现这一点,这是有道理的:android:tag可以在<fragment>中用于为片段提供特定的标签名称 - user1978019

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