В чем разница между @+ id/android: list и @+ id/list
Мне интересно, какая разница между @+id/android:list
и @+id/list
. Я знаю последнее, которое является регулярным назначением идентификатора, но первое выглядит другим. Что делает его особенным?
Где я его видел:
Я учился в ListView, ListAdapter и тому подобное, и автор определил ListView в XML файле макета, как показано ниже:
<?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
?
Спасибо.
Ответы
Ответ 1
Идентификаторы ресурсов в Android относятся к пакету (это хорошо, иначе у вас будет много конфликтов, если ваше приложение имеет дело с несколькими пакетами одновременно).
@+id/list
создаст идентификатор ресурса в вашем приложении (= ваш пакет) с именем "list" и присвоит ему уникальный идентификатор. В коде это будет R.id.list
.
@android:id/list
будет использовать ID-список из пакета android (который в коде будет android.R.id.list
.
EDIT: нужно добавить исправления. Дэвид Хедлунд указал: правильная ссылка будет @android:id/list
. Кроме того, +
указывает, что вы определяете новый ID - вам явно не нужно, когда вы ссылаетесь на то, что было определено в Android API.
Ответ 2
Я думаю, что код примера, который вы опубликовали, имеет опечатку, поэтому он должен быть @android:id/list
(без +). Из ListActivity javadoc:
ваш собственный просмотр ДОЛЖЕН содержать объект ListView с идентификатором id "@android: id/list"
@android:id/list
специфичен для ListActivity, поэтому вам не нужно, если вы добавляете ListView в любой другой вид Activity. Вы должны расширить ListActivity, если хотите, чтобы пользователь сделал больше, чем просмотр списка. Например, вы можете переопределить ListActivity.onListItemClick
для ответа на клики по элементу в списке.
Аналогично, @id/android:empty
(опять же, без +), является частным случаем для ListActivity. Это позволяет указать альтернативный вид, который должен отображаться, когда ваш список пуст. Этот вид не будет отображаться при заполнении списка.
Ответ 3
в android,
В XML: @[package:] макет/имя файла
как
android:id="@+id/android:list"
Это стандартный способ ссылаться на представление списка при обращении к listFragment или listActivity
поэтому filename - это android: list - ссылка на ListView.
перейдите к res/values/ids.xml
вы найдете <item type="id" name="list" />
ListView - это группа представлений, которая отображает список прокручиваемых элементов. Элементы списка автоматически вставляются в список с помощью адаптера, который извлекает контент из источника, такого как массив или запрос базы данных, и преобразует результат каждого элемента в представление, помещенное в список.