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

时间:2010-12-04 20:16:22

标签: 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>

并且还让我提到@+id/android:empty ID。

他还扩展了ListActivity课程。

这是source of the article

还有我的想法是:

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

3 个答案:

答案 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是一个显示可滚动项列表的视图组。使用从数据库或数据库查询等源中提取内容的适配器将列表项自动插入到列表中,并将每个项结果转换为放入列表中的视图。