@ + id/android:list和@ + id/list之间有什么区别

Tar*_*rik 21 java android listview

我想知道@+id/android:list和之间的区别是什么@+id/list.我知道最后一个是常规id分配,但第一个看起来不同.是什么让它与众不同?

我在哪里看到它: 我正在研究ListView,ListAdapter和类似的东西,作者在布局xml文件中定义ListView,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
<ListView
    android:id="@+id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />
<TextView
    android:id="@+id/android:empty"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="@string/main_no_items"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

还让我提一下@+id/android:emptyid.

他还扩展了ListActivity课程.

这是本文来源.

还有什么在我脑海中,因为问题是:

  1. 我们应该延长ListActivity吗?也许我想要一个包含其他视图的Activity.
  2. 我们使用@+id/android:list只是因为我们扩展ListActivity或者我们可以使用相同的约定,如果我们扩展Activity

谢谢.

Ebo*_*ike 45

Android中的资源ID特定于程序包(这很好,否则如果您的应用程序同时处理多个程序包,则会遇到很多冲突).

@+id/list将在您的应用程序(=您的包)中使用名称"list"创建资源ID,并为其指定唯一ID.在代码中,那将是R.id.list.

@android:id/list将使用包android中的ID"列表"(在代码中,它将是android.R.id.list.

编辑:需要添加校正David Hedlund指出:适当的参考将是@android:id/list.此外,+表示您正在定义新ID - 当您引用Android API中定义的内容时,您显然不需要这样做.

  • 字符串开头的at符号(@)表示XML解析器应解析并扩展ID字符串的其余部分,并将其标识为ID资源.加号(+)表示这是一个新的资源名称,必须创建并添加到我们的资源中(在R.java文件中).Android框架提供了许多其他ID资源.**引用Android资源ID时,您不需要加号,但必须添加android包命名空间.***来自:http://developer.android.com/reference/java/text/Annotation.html (3认同)

Eri*_*ine 11

我认为你发布的示例代码有一个拼写错误,所以它应该是@android:id/list(没有+).从ListActivity javadoc:

你自己的视图必须包含一个ID为"@android:id/list"的ListView对象

@android:id/list特定于ListActivity,因此如果要将ListView添加到任何其他类型的Activity中,则不需要它.如果您希望用户执行更多操作而不是查看列表,则应扩展ListActivity.例如,您可以覆盖ListActivity.onListItemClick以响应列表中项目的点击.

类似地,@id/android:empty(再次,没有+),是ListActivity的特例.这允许您指定在列表为空时应显示的备用视图.填充列表时,不会显示该视图.