@+id/android:list 和 @+id/list 有啥区别

Posted

技术标签:

【中文标题】@+id/android:list 和 @+id/list 有啥区别【英文标题】:What is difference between @+id/android:list and @+id/list@+id/android:list 和 @+id/list 有什么区别 【发布时间】:2011-05-20 07:53:59 【问题描述】:

我想知道@+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_
   android:layout_
   >
<ListView
    android:id="@+id/android:list"
    android:layout_
    android:layout_
    />
<TextView
    android:id="@+id/android:empty"
    android:layout_
    android:layout_
    android:text="@string/main_no_items"/>
</LinearLayout>

我还要提一下@+id/android:empty id。

而且他还扩展了ListActivity 类。

这里是source of the article。

还有我想到的问题:

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

谢谢。

【问题讨论】:

【参考方案1】:

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 中定义的内容时,您显然不需要它。

【讨论】:

这是对正在发生的事情的正确描述,但正如 elevine 指出的那样,语法是 @android:id/list+ 意味着向R 添加一些东西,而省略加号只是意味着引用已经定义的东西。 应该是@+id/android:list还是@id/android:list 谢谢大卫,我不假思索地从问题中复制了它。 @Brave: @id/android:list,因为Android API已经定义了list 字符串开头的at-symbol (@) 表示XML 解析器应该解析并扩展ID 字符串的其余部分,并将其标识为ID 资源。加号 (+) 表示这是一个新的资源名称,必须创建并添加到我们的资源中(在 R.java 文件中)。 Android 框架提供了许多其他 ID 资源。 引用Android资源ID时,不需要加号,但必须添加android包命名空间。* from : developer.android.com/reference/java/text/Annotation.html【参考方案2】:

我认为您发布的示例代码有错字,所以应该是@android:id/list(不带+)。来自ListActivity javadoc:

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

的 ListView 对象

@android:id/list 是 ListActivity 特有的,因此如果您将 ListView 添加到任何其他类型的 Activity 中,则不需要它。如果您希望用户做的不仅仅是查看列表,您应该扩展 ListActivity。例如,您可以覆盖 ListActivity.onListItemClick 以响应对列表中某个项目的点击。

同样,@id/android:empty(同样,没有 +)是 ListActivity 的一个特例。这允许您指定在列表为空时应显示的替代视图。填充列表时不会显示该视图。

【讨论】:

【参考方案3】:

在安卓中,

在 XML 中:@[package:]layout/filename

喜欢

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

这是引用 listFragment 或 listActivity 时引用列表视图的标准方式

所以文件名是 android:list 是对 ListView 的引用。

导航到res/values/ids.xml

你会发现&lt;item type="id" name="list" /&gt;

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

【讨论】:

以上是关于@+id/android:list 和 @+id/list 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

Android:使用数组项填充列表视图

ExpandableListView控件基本使用

ANDROID_MARS学习笔记_S02_011_ANIMATION_LayoutAnimationController

为啥 id() == id() 和 id([]) == id([]) 在 Python 中?

Android中“@id/”和“@+id/”的区别

CSS 的 ID 和 Class 有啥区别?如何正确使用它们