Когда вы должны использовать `@ + id` вместо` @ id`? - PullRequest
4 голосов
/ 12 января 2012

У меня есть куча View с в <merge>, и я включил это <merge> в RelativeLayout. Я пытаюсь сослаться на идентификаторы этих включенных View s, чтобы выступать в качестве якорей для моих других View s, но Eclipse жалуется, что идентификаторы не разрешаются. Я нашел обходной путь, используя @+id вместо @id, когда впервые ссылаюсь на них , а не когда фактически определяю объекты, на которые они ссылаются. Я уже определил два ID в Style и во включенном <merge>, где они объявлены, так что будет немного неэффективно, если я продолжу повторять определение идентификатора.

Это правильный способ сделать это? Я предполагаю, что это плохо, потому что «+» - это еще одна инициализация. Моя текущая гипотеза заключается в том, что вы должны использовать @+id, когда вы впервые используете идентификатор, а не когда вы инициализируете объект, который будет представлять идентификатор, немного похоже на C/C++ и как они требуют по крайней мере прототип функции в строках до фактического кода, который использует функцию.

Другой вопрос, который у меня возникает, - когда вы используете построитель пользовательского интерфейса на основе графического интерфейса Eclipse, я заметил, что они всегда используют @+id, а не @id. Это приемлемо, потому что это кажется мне неэффективным; как будто приложение будет тратить больше времени на определение того, был ли идентификатор объявлен в R.id.

1 Ответ

3 голосов
/ 14 января 2012

Использование формата @+id указывает компилятору ресурсов Android назначать идентификатор для вашего элемента, на самом деле это не сам идентификатор.Поэтому, если я использую @+id/myNewId, компилятор ресурсов создаст новый идентификатор с именем myNewId и предоставит ему номер.Фактический номер можно получить из вашего кода как R.id.myNewId.

. Если вы используете @id, компилятор будет искать R.id.id.Вы можете определить свои собственные идентификаторы в файлах XML, как описано здесь: http://developer.android.com/guide/topics/resources/more-resources.html#Id. Вы можете создать свой собственный файл в res/values/[your_filename].xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="id_name" />
</resources>

, а затем обратиться к @id_name, например:

Вы также можете использовать идентификатор, определенный в пространстве имен Android: @android:id/empty

Это хорошо объяснено в документации Android: http://developer.android.com/guide/topics/ui/declaring-layout.html#id

Также есть дальнейшее обсуждениездесь: android: id, что является знаком плюс для

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