@+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
你会发现<item type="id" name="list" />
ListView 是一个显示可滚动项目列表的视图组。列表项使用适配器自动插入到列表中,该适配器从源(例如数组或数据库查询)中提取内容并将每个项结果转换为放置到列表中的视图。
【讨论】:
以上是关于@+id/android:list 和 @+id/list 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
ANDROID_MARS学习笔记_S02_011_ANIMATION_LayoutAnimationController