我想知道@+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
课程。
还有我的想法是:
ListActivity
吗?也许我想要一个包含其他视图的活动。@+id/android:list
只是因为我们扩展了ListActivity
,或者如果我们扩展Activity
我们可以使用相同的约定吗?感谢。
答案 0 :(得分:43)
Android中的资源ID特定于一个软件包(这很好,否则如果你的应用程序同时处理多个软件包,你会遇到很多冲突。)
@+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 :(得分:11)
我认为你发布的示例代码有一个拼写错误,所以它应该是@android:id/list
(没有+)。来自ListActivity javadoc:
您自己的视图必须包含一个ID为“@ android:id / list”的ListView对象
@android:id/list
特定于ListActivity,因此如果要将ListView添加到任何其他类型的Activity中,则不需要它。如果您希望用户执行更多操作而不是查看列表,则应扩展ListActivity。例如,您可以覆盖ListActivity.onListItemClick
以响应列表中项目的点击次数。
同样,@id/android:empty
(再次,没有+)是ListActivity的特例。这允许您指定在列表为空时应显示的备用视图。填充列表时不会显示该视图。
答案 2 :(得分:0)
在android中,
在XML中:@ [package:] layout / filename
像
android:id="@+id/android:list"
这是引用listFragment或listActivity时引用列表视图的标准方法
所以filename是android:list是对ListView的引用。
导航至res/values/ids.xml
你会发现<item type="id" name="list" />
ListView是一个显示可滚动项列表的视图组。使用从数据库或数据库查询等源中提取内容的适配器将列表项自动插入到列表中,并将每个项结果转换为放入列表中的视图。