@ottepel84
Начинающий

Как взаимодействует класс MainActivity и activity_main.xml?

Как создается класс R, как он связывается с activity_main.xml? Я так понимаю на основе activity_main.xml создается объект с определенными в нем дочерними объектами.. но как это сделано и каким софтом.
Как обработчики определенные в MainActivity связываются с именами обработчиков в activity_main.xml? Явно это не прописано, просто указано имя обработчика в xml атрибуте объекта..
Как работает эта магия? Или где об этом можно прочитать?
  • Вопрос задан
  • 601 просмотр
Пригласить эксперта
Ответы на вопрос 2
@idkravitz
Как обычно такие вещи можно почитать в документации:
О ресурсах: https://developer.android.com/guide/topics/resourc...
О доступе к ресурсам: https://developer.android.com/guide/topics/resourc...
Класс R генерируется тулзой aapt (Android Asset Packaging Tool). R содержит идентификаторы для соответствующих ресурсов, которые можно затем использовать в своём коде (например, findViewById). Связывается MainActivity и activity_main.xml через вызов setContentView(R.layout.activity_main). setContentView имеет две перегрузки, одна для вызова с объектом View - задать конкретный объект для представления UI данного Activity, а другая для вызова с int - задаёт идентификатор layout ресурса, который затем надувается (inflate). inflate это, как несложно себе вообразить, процесс создания иерархии View по данным из ресурсного файла с layout, занимаются этим процессом потомки абстрактного класса LayoutInflater, собственно он и умеет привязывать обработчики и все остальное.

Также можете поискать в своём проекте сгенерированный файл R.java и просмотреть его.
Ответ написан
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
Как создается класс R

Генерируется автоматически утилитой aapt (aapt2), которой передаются пути к ресурсам.
Сам класс R состоит исключительно из статических подклассов со статическими int константами, которые представляют собой id ресурсов.

Как обработчики определенные в MainActivity связываются с именами обработчиков в activity_main.xml? Явно это не прописано, просто указано имя обработчика в xml атрибуте объекта..

Непонятно, что за обработчики.
В самом начале вы вызываете метод setContentView(R.id.layout_id), который применяет лайаут к активити(то есть, создаёт все View на основе xml), а через метод findViewById(), как понятно из названия, ищите View по его id. Собственно, с этим View можно делать, что пожелаете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы