Подтвердить что ты не робот

В чем разница между @+ 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?

Спасибо.

4b9b3361

Ответ 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 - это группа представлений, которая отображает список прокручиваемых элементов. Элементы списка автоматически вставляются в список с помощью адаптера, который извлекает контент из источника, такого как массив или запрос базы данных, и преобразует результат каждого элемента в представление, помещенное в список.