【问题标题】:Adding Fragment to Activity in XML: What is the class attribute and why doesn't it have a namespace在 XML 中向 Activity 添加 Fragment:什么是类属性以及为什么它没有命名空间
【发布时间】:2014-12-16 04:23:30
【问题描述】:

在下面的sn-p中,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent" 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" />

</LinearLayout>

class属性是什么,如果是我们的Fragment类,那为什么在它的名字后面加上FragmentLayout$,为什么没有android或者任何命名空间?

我完全可以看出它是Fragment类的名称,因为TitlesFragmentexample I took this code from中的Fragment类,而com.example.android.apis.app告诉我,我们必须给这个属性一个完全限定的名称类,但是FragmentLayout$附加到类名的部分是什么,即TitlesFragment

我从this developer guide 的示例中获取了这段代码,但是没有对类属性的解释。我也找不到任何相关的here in the reference。如果它是太基本的东西,请原谅我。

【问题讨论】:

    标签: android android-layout android-fragments android-xml android-listfragment


    【解决方案1】:

    它确实引用了 Fragment 类。 FragmentLayout$TitlesFragment 表示TitlesFragmentFragmentLayout 类中的公共静态嵌套类。如果您检查that class,您会发现它是ListFragment 的子类。

    public static class TitlesFragment extends ListFragment {
    

    我在开发者页面中看到的唯一引用该符号的是Custom Components page.(它在子标题4.使用自定义组件下。)

    【讨论】:

    • 感谢您的回答。我只是检查了一下并了解到here 编译器“内部”使用 $ 来装饰某些变量名,例如当OuterClass 类中的InnerClass 类被编译时,所形成的.class 将被编译器命名为OuterClass$InnerClass.class。这让我很困惑,这是由编译器命名的,还是我们只是简单地使用$ 符号来引用内部类的.class 版本,我们通常用点表示法来引用它:OuterClass.InnerClass?
    • 感谢您的链接,它在很大程度上提供了一个想法。
    • 那篇文章与这里无关,因为它与 Java 语言有关。我们正在讨论 Android 布局 xml; Java 编译器从不直接触及它。至于android:name 属性,据我所知,几乎是一样的,如果没有找到class,则使用name。但是,我相信在这种特殊情况下您必须使用class;即,使用该符号表示静态内部类。
    • This post 讨论 classname
    • 我错了。我刚刚运行了一个测试,您可以将android:name 属性与$ 表示法一起使用。所以看起来classandroid:name 是完全可以互换的。正如我发布的链接中的评论所暗示的那样,class 可能只是 Fragment 开发早期的遗留物。
    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2010-09-12
    相关资源
    最近更新 更多