Прямые ссылки на публичные уроки для быстрого старта и стабильной индексации lesson-страниц.
В этом уроке вы научитесь вручную создавать новый компонент Activity в своём проекте и сделаете первые шаги в навигации между экранами. Мы будем не только переключаться между двумя Activity, но и передавать примитивные типы данных — строки и числа. Передачу сложных типов данных (объектов) оставим на следующую часть цикла.
Activity — это системный компонент, представляющий экран: область на устройстве, которая что-то отображает и с чем можно взаимодействовать. Исключение — statusbar и navbar: технически они являются частью системного интерфейса.
Взаимодействовать можно не обязательно с запущенным приложением. Рабочий стол с иконками (Launcher) — это тоже системное приложение, и в нём за отображение элементов также отвечает Activity.
Создать новый компонент Activity можно в пару кликов: New → Activity → Empty Views Activity. Однако полезно сделать это вручную, чтобы понять, что именно генерирует среда разработки.
Алгоритм создания:
FirstDemoActivity (постфикс Activity обязателен). Наследуюсь от AppCompatActivity(). Наследоваться от базового класса Activity нельзя: AppCompat — библиотека, которая позволяет использовать возможности новых версий Android на старых устройствах.activity в качестве префикса. В лейауте размещаю идентифицирующий текст.onCreate(), чтобы связать класс с разметкой через setContentView(). В параметрах обращаюсь к классу R, указываю тип (layout) и название файла разметки.application добавляю тег с нашей activity.Обратите внимание: action и category с параметрами MAIN и LAUNCHER указывают системе, какая Activity открывается при запуске приложения.
Для демонстрации навигации создам ещё один компонент — SecondDemoActivity. В разметке обоих экранов добавлю кнопки навигации и пустые слушатели.
Для демонстрации используются пустые экраны, поскольку основное учебное приложение будет реализовываться на фрагментах с подходом Single Activity.
Переходы между экранами (Фрагменты или Activity) делятся на три группы:
Примечание: здесь не рассматривается управление навигацией через Jetpack Navigation — при его использовании реализация и передача данных будут отличаться.
Для перехода с одной Activity на другую создаётся объект Intent («намерение») — способ сообщить системе о своём намерении что-то сделать.
this) и класс-назначение.::class — способ получить ссылку на класс в Kotlin..java — получение Java-совместимого объекта Class, который требует Android.startActivity(intent) — объявили намерение и говорим системе «выполни это».binding.btnOpenSecond.setOnClickListener { val intent = Intent(this, SecondDemoActivity::class.java) startActivity(intent) }
Ту же логику дублируем на втором экране для возврата на первый.
Написанный выше код — пример явного интента (explicit intent): в нём явно указывается компонент для запуска по полному имени класса.
Неявный интент (implicit intent) не указывает конкретное приложение или компонент, а описывает общее действие, которое может выполнить любое подходящее приложение. Например, для открытия веб-страницы создаётся неявный Intent, и любой установленный браузер откроет указанный URL.
Существует несколько способов передачи данных напрямую между Activity — без использования ViewModel, баз данных и стейтов. У каждого есть свои преимущества и ограничения.
Способ подразумевает добавление Extras («добавлений») к интенту. Используется для лёгких данных: строк, чисел, Boolean-флагов, а также массивов и списков примитивов. Объекты без дополнительной обработки передать не получится.
Как отправить данные:
Основным способом передачи данных между Activity является объект Bundle. Метод putExtra() — удобная обёртка над его созданием и упаковкой (внутри Bundle создаётся неявно). Подробнее о прямом создании Bundle поговорим при передаче объектов. У метода два параметра:
putExtra() вызывается поочерёдно для каждого передаваемого значения:
binding.btnOpenSecond.setOnClickListener { val intent = Intent(this, SecondDemoActivity::class.java) intent.putExtra("EXTRA_KEY_TEXT", "don't panic") intent.putExtra("EXTRA_KEY_NUMBER", 42) startActivity(intent) }
Как получить данные:
В SecondDemoActivity обращаемся к свойству intent (Android Studio предлагает его вместо getIntent()). Далее используем типизированные методы:
getStringExtra("ключ") — для строки;getIntExtra("ключ", 0) — для числа, второй параметр — значение по умолчанию.Ключи рекомендуется хранить в константах и использовать их глобально по всему проекту, чтобы избежать ошибок при несовпадении строк. Полученные данные помещаем в переменные и отображаем на экране.