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

21
我想知道@+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>

还有要提到的是 @+id/android:empty 这个id。

他还继承了 ListActivity 类。

这里是文章来源

同时我脑海中想问的问题有:

  1. 我们应该继承 ListActivity 吗?也许我想要一个同时包含其他视图的 Activity。
  2. 我们使用 @+id/android:list 只是因为我们继承了 ListActivity 吗,如果我们继承 Activity,是否可以使用相同的约定?

谢谢。

3个回答

46

Android中的资源ID是针对特定包(package)的(这很好,否则如果你的应用程序同时处理几个包,你将会遇到大量冲突)。

@+id/list会在您的应用程序(即您的包)中创建一个名为“list”的资源ID,并分配一个唯一的ID。在代码中,它将被表示为R.id.list

@android:id/list将使用来自android包的ID“list”(在代码中,这将是android.R.id.list)。

编辑:需要添加David Hedlund指出的更正:正确的引用应该是@android:id/list。此外,“+”表示您正在定义新的ID - 当您引用在Android API中定义的内容时,显然不需要使用它。


1
这是正确的描述,但正如elevine所指出的那样,语法是@android:id/list+表示向R添加某些内容,而省略加号仅意味着引用已定义的内容。 - David Hedlund
应该是 @+id/android:list 还是 @id/android:list - Tarik
谢谢David,我没有考虑就从问题中复制了它。 - EboMike
@Brave:@id/android:list,因为Android API已经定义了list - EboMike
3
字符串开头的艾特符号(@)表示XML解析器应该解析并扩展其余的ID字符串,并将其识别为ID资源。加号(+)表示这是一个新的资源名称,必须创建并添加到我们的资源中(R.java文件中)。Android框架提供了许多其他ID资源。当引用Android资源ID时,您不需要加号,但必须添加android包命名空间。* 来自:http://developer.android.com/reference/java/text/Annotation.html - Tarik
上面的链接已经过时了。请查看这个链接:http://developer.android.com/guide/topics/ui/declaring-layout.html - zeekvfu

11

我认为你发布的示例代码有一个错别字,正确应该是 @android:id/list (无需 +)。根据ListActivity javadoc

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

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

同样地,@id/android:empty(再次,不需要 +)是适用于 ListActivity 的特殊情况。 这允许您指定在列表为空时应显示的替代视图。 在填充列表时,该视图将不会显示。


0

在安卓中,

XML 中的语法:@[package:]layout/filename

例如:

android:id="@+id/android:list"

当提到listFragment或listActivity时,这是指引用列表视图的标准方式。

因此,文件名android:list是对ListView的引用。

导航到res/values/ids.xml

您会找到<item type="id" name="list" />

ListView是一个显示可滚动项列表的视图组。列表项使用适配器自动插入到列表中,适配器从源(例如数组或数据库查询)中提取内容,并将每个项目结果转换为放置在列表中的视图。


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