Я использую android studio 4.1.1
и котлин.
Я пытаюсь научиться программировать приложения для Android с помощью Android Studio и Kotlin. У меня есть вопрос, на который мне не ответили несколько руководств и поисковых тем. Как управление переходит от класса MainActivity.kt
к другому классу, например: FirstFragment.kt
?
У меня все хорошо с другими вещами, которые я изучаю в учебниках, но я не могу понять это.
Пример:
Я создаю новое приложение Basic Activity в Android Studio с помощью Kotlin. В каталоге java я вижу эти классы: FirstFragment.kt, MainActivity.kt и SecondFragment.kt.
В каталоге res/layout/ я вижу: activity_main.xml
, content_main.xml
, fragment_first.xml
и fragment_second.xml
.
Вопрос 1) Когда приложение загружается в эмуляторе, я вижу кнопку и textView из fragment_first.xml
. Как это произошло? Я не вижу в коде, где написано «загрузить фрагмент_first.xml».
MainActivity.kt
имеет setContentView(R.layout.activity_main)
, который загружает этот макет. В файле activity_main.xml есть <include layout = "@layout/content_main" />
. Но оттуда я не знаю, где найти код, который загружает макет fragment_first.xml
.
Я считаю, что при загрузке fragment_first.xml
управление переходит от MainActivity.kt
к FirstFragment.kt
, да? Вопрос 2). Это из-за функции onCreate?
Спасибо, что помогли мне лучше понять это.
Есть несколько способов загрузить фрагмент. Традиционно вы используете FragmentManager для создания транзакции фрагмента, которая сообщает Activity поместить фрагмент в иерархию представлений и начать управлять его жизненным циклом.
Совсем недавно они добавили компонент Navigation, который можно использовать вместо прямого использования FragmentManager.
В текущем новом проекте Basic Activity макет activity_main.xml
включает в себя макет content_main
. В content_main.xml
вы увидите, что он включает элемент fragment
, для которого задан фрагмент (с использованием параметра name
) NavHostFragment
, который представляет собой специальный фрагмент, который компонент навигации использует для размещения дочерних фрагментов, указанных в XML-файле навигации. Этот элемент fragment
также указывает XML-файл навигации с помощью свойства navGraph
. Он указывает nav_graph.xml
, который вы найдете в каталоге res/navigation
.
Если вы откроете nav_graph.xml
, вы увидите, что FirstFragment
установлен как домашний фрагмент, так что это то, что вытягивает его как первый фрагмент, который вы видите.
В основном, поток управления:
onCreate()
устанавливает вид контента на activity_main
, который включает content_main
.content_main
включает NavHostFragment, который автоматически вставляется в иерархию представлений, поэтому действие запускает его.nav_graph
, что указывает ему сначала загрузить FirstFragment.
#Tenfour04 Только что загорелась лампочка! Большое спасибо за то, что объяснили это. Имеет смысл и также проясняет пару других вопросов. Очень ценится.