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

2022-09-02 02:33:09

我想知道 和 之间的区别是什么。我知道最后一个是常规的id分配,但第一个看起来不同。是什么让它如此特别?@+id/android:list@+id/list

我看到它的地方:我正在研究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。@+id/android:empty

他还扩展了阶级。ListActivity

这是文章的来源

而且我脑海中的问题是:

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

谢谢。


答案 1

Android 中的资源 ID 特定于某个包(这很好,否则,如果你的应用同时处理多个包,你会遇到很多冲突)。

@+id/list将在应用(=包)中创建一个名为“list”的资源 ID,并为其提供唯一 ID。在代码中,这将是 .R.id.list

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

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


答案 2

我认为您发布的示例代码有拼写错误,因此应该是(没有+)。从 ListActivity javadoc:@android:id/list

您自己的视图必须包含一个 Id 为“@android:id/list”的 ListView 对象

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

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


推荐