Android Studio с Kotlin Как управление переходит от MainActivity к другому классу

Я использую 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?

Спасибо, что помогли мне лучше понять это.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
258
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть несколько способов загрузить фрагмент. Традиционно вы используете 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 установлен как домашний фрагмент, так что это то, что вытягивает его как первый фрагмент, который вы видите.

В основном, поток управления:

  1. Активность onCreate() устанавливает вид контента на activity_main, который включает content_main.
  2. content_main включает NavHostFragment, который автоматически вставляется в иерархию представлений, поэтому действие запускает его.
  3. NavHostFragment настроен в XML на использование nav_graph, что указывает ему сначала загрузить FirstFragment.

#Tenfour04 Только что загорелась лампочка! Большое спасибо за то, что объяснили это. Имеет смысл и также проясняет пару других вопросов. Очень ценится.

John Cowan 15.12.2020 13:58

Другие вопросы по теме