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

Какова концепция Р.Ява?

В android R.java используется для обеспечения доступа к ресурсам, определенным в файлах XML. Чтобы получить доступ к ресурсу, нам нужно вызвать метод findViewById(), передающий в идентификаторе ресурса, который нужно извлечь.

Это похоже на Spring, где beans определены в контексте XML и извлекаются с использованием контекста приложения. context.getBean("beanId")

Это обеспечивает свободную связь, поскольку beans определяются извне и могут быть изменены без внесения изменений в код.

Это меня смущает. Хотя какой вид Android похож на spring, какое преимущество он предлагает?

  • Какой смысл иметь промежуточную R.java? Не могли бы мы просто получить ресурсы непосредственно из XML с помощью ресурса контекст читателя/приложения. например findViewById("resourceId")
  • Не существует свободной связи. Поскольку ссылки в R.java автоматически генерируются, как можно удалить ресурс и добавить новый?
  • Каков шаблон дизайна (если он есть)?
  • Было бы лучше, если бы ресурсы были введены с использованием IOC (например, Roboguice)? Почему тогда Google решила дать нам такую странный способ работы с ресурсами?

Простите мое невежество. Я разработчик Java-новичка, который слишком много пытается попробовать.:-) Благодарим за отзывы.

4b9b3361

Ответ 1

android.R.java не только там, где хранятся идентификаторы XML. Он также содержит доступ к ресурсам - например, чертежи, макеты, строки, массивы и в основном все, что можно объявить в ресурсах.

Лично я считаю, что это полезно при использовании Eclipse. Я могу просто набрать findViewById(R.id., а Eclipse отобразит всплывающую подсказку со списком опций на выбор.

Однако на уровне платформы я бы сказал, что жесткие переменные id помогают предотвратить ошибки при использовании строк для идентификации ресурсов - что-то, что можно отлаживать при программировании (или во время компиляции, а не во время выполнения).

Ответ 2

Самое большое преимущество - в локализации и предоставлении альтернативных ресурсов для разных размеров экрана.

например, у вас может быть ресурс String R.string.myname, это может быть определено на английском языке в /values-en/strings.xml и на испанском языке в /values-es/strings.xml

Система позаботится или подберет правильный файл в зависимости от локали, которую вам просто нужно использовать @string/myname в вашем файле макета или R.string.myname в вашем коде.

Аналогичным образом вы могли бы иметь два файла макета для портрета и ландшафта, определенных в

res/layout/mylayout.xml
res/layout-land/mylayout.xml

В вашем коде вы просто укажете R.layout.mylayout, чтобы раздуть макет. Менеджер ресурсов берет файл в макете, если устройство находится в ландшафтном режиме.

Выполнение этого вручную было бы кошмаром - следовательно, потребность в файле R

Ответ 3

Сравнение немного ощущает несколько немного (на самом деле) странно, потому что вы сравниваете два механизма, основанные на том, что они используют именованные вещи для создания вещей. Для загрузки ресурсов, например, посмотрите, как выполняется обработка ресурсов в мире .Net.


Он обеспечивает проверку времени компиляции, если ресурс доступен. Потому что, если это не так, то не будет статического внутри R.java, который указывает на него. В примере Spring, как вы можете быть уверены, что существует bean, называемый beanId? Однако он не предусматривает проверку правильности типа ресурса.

Почему это не потеряно? Пока новый ресурс имеет одно и то же имя, он будет генерировать одну и ту же статическую константу. В Spring вам нужно будет использовать одно и то же имя bean.

Дизайн шаблона? Никто. Он просто добавляет один уровень косвенности, называя ресурсы, а затем ссылается на них только по имени, а не путем непосредственной загрузки их из их истинного местоположения.

Фактически, ресурсы вводятся, потому что загрузка ресурсов должна справляться с локализацией. См. здесь о том, как Android работает; в мире .Net, дополнительные культуры упаковываются в сателлитные сборки; диспетчер ресурсов загрузит нужную в соответствии с текущей культурой.

Ответ 4

Он также содержит доступ к ресурсам - например, идентификатор, чертежи, макеты, строки, массивы и в основном все, что вы можете объявить в ресурсах.