В чем разница между @ + id / android: list и @ + id / list - PullRequest
20 голосов
/ 04 декабря 2010

Мне интересно, в чем разница между @+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.

Вот источник статьи .

А также, что у меня на уме в виде вопросов:

  1. Должны ли мы расширить ListActivity?Возможно, я хочу действие, которое также содержит другие представления.
  2. Мы используем @+id/android:list только потому, что расширяем ListActivity, или мы можем использовать то же соглашение, если расширяем Activity?

Спасибо.

Ответы [ 3 ]

44 голосов
/ 04 декабря 2010

Идентификаторы ресурсов в Android относятся к пакету (это хорошо, иначе у вас будет много конфликтов, если ваше приложение будет работать с несколькими пакетами одновременно).

@+id/list будетсоздайте идентификатор ресурса в вашем приложении (= ваш пакет) с именем «список» и присвойте ему уникальный идентификатор.В коде это будет R.id.list.

@android:id/list будет использовать идентификатор "список" из пакета Android (который в коде будет android.R.id.list.

РЕДАКТИРОВАТЬ:Необходимо добавить исправления, на которые указал Дэвид Хедлунд: правильная ссылка будет @android:id/list. Также, + указывает, что вы определяете новый идентификатор - вам, очевидно, это не нужно, когда вы ссылаетесь на что-то, что было определено вAndroid API.

11 голосов
/ 04 декабря 2010

Я думаю, что приведенный вами пример кода содержит опечатку, поэтому он должен быть @android:id/list (без +).Из javadoc ListActivity :

ваше собственное представление ДОЛЖНО содержать объект ListView с идентификатором "@ android: id / list"

@android:id/list относится к ListActivity, поэтому он вам не нужен, если вы добавляете ListView в любой другой вид действия.Вы должны расширить ListActivity, если хотите, чтобы пользователь делал больше, чем просто просматривал список.Например, вы можете переопределить ListActivity.onListItemClick, чтобы реагировать на клики по элементу в списке.

Аналогично, @id/android:empty (опять же, без +) - это особый случай для ListActivity.Это позволяет вам указать альтернативное представление, которое должно отображаться, когда ваш список пуст.Это представление не будет отображаться при заполнении списка.

0 голосов
/ 13 февраля 2016

в Android,

В XML: @ [package:] layout / filename

like

android:id="@+id/android:list"

Это стандартный способчтобы ссылаться на представление списка при обращении к listFragment или listActivity

, поэтому имя файла равно android: list является ссылкой на ListView.<item type="id" name="list" />

ListView - это группа представлений, которая отображает список прокручиваемых элементов.Элементы списка автоматически вставляются в список с помощью адаптера, который извлекает содержимое из источника, такого как запрос массива или базы данных, и преобразует результаты каждого элемента в представление, помещенное в список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...