- How to switch between Activities in Android
- Transitioning Between Activities in Android
- Create Two Activities
- Add Both Activities to the App Manifest
- Create the Intent and Start the Activity
- Using the finish() method to preserve the back button functionality
- How can I pass data between Activities?
- What is an Intent in Android?
- Полный список
- Памятка по жизненному циклу Android — часть I. Отдельные Activity
- Часть 1: Activity
- Одно Aсtivity — Сценарий 1. Приложение завершено и перезапущено
- Одно Aсtivity — Сценарий 2. Пользователь уходит
- Одно Aсtivity — Сценарий 3. Изменение кофигурации
- Одно Aсtivity — Сценарий 4. Приложение приостановлено системой
How to switch between Activities in Android
When making your Android apps you may get to the point where you need to create multiple Activities for different screens within your app. When you have multiple Activities you will need a way to transition between them in a way that doesn’t break the back button functionality.
In order to switch between Activities in Android you will need to follow these steps:
- Create the Activities
- Add the Activities to the app’s Manifest
- Create an Intent referencing the Activity class you want to switch to
- Call the startActivity(Intent) method to switch to the Activity
- Create a back button on the new Activity and call the finish() method on an Activity when the back button is pressed
I have created sample code below also available on GitHub showing how to transition between Activities.
A video version of this tutorial is available on YouTube which I have also embedded below.
Transitioning Between Activities in Android
Create Two Activities
We will start by creating two Activities, FirstActivity and SecondActivity.
The FirstActivity will contain a ConstraintLayout with a TextView label showing “First Activity” and a Button with the text “Go to Second Activity”.
User Interface of the First Activity
The SecondActivity will contain a ConstraintLayout with a TextView label showing “Second Activity” and a Button with the text “Back to First Activity”.
Add Both Activities to the App Manifest
Ensure there is an activity entry for both Activities in the application section of the manifest file located at app/src/main/AndroidManifest.xml
Create the Intent and Start the Activity
Making the following changes to the FirstActivity class.
Add a new method called “switchActivities()”, inside this method we will create an Intent passing a parameters of the current activity and the new activity class. Then use the startActivity(Intent) method to passing the Intent that was just created.
Inside the onCreate method, add an OnClickListener to the Button used for switching the new Activity. When selected call the switchActivities() method.
Using the finish() method to preserve the back button functionality
Making the following changes to the SecondActivity class.
Inside the onCreate method, add an OnClickListener to the Button used for going back to the previous Activity. When selected call the finish() method will will remove the SecondActivity and take you back to the FirstActivity.
User Interface of the Second Activity
How can I pass data between Activities?
When switching between Activities you may need to pass data from the source Activity to the destination Activity.
This is possible by providing data to the Intent used to transition between Activities through the use of the putExtra(…) method.
Using the example above to pass data from the FirstActivity to the SecondActivity, use the putExtra(…) method inside the method for switching between Activities, to pass a message that includes a reference to the origin Activity.
Inside the SecondActivity class, add a TextView to display the result and inside the onCreate(…) method, call the getIntent() method and the getStringExtra(…) method on the Intent to retrieve the message and populate it into the result TextView.
What is an Intent in Android?
Intents are used in Android to request an action from other app components such as Activities, Services, Broadcast Receivers or Content Providers.
The main use cases for Intents are:
- Starting an activity
- Starting a service
- Delivering a broadcast
Intents can be Explicit or Implicit. Explicit intents explicit specify the application that will perform the action on the intent. Implicit are kept generic and request a general action to be performed which could be satisfied by a number of different apps.
Intent Filters are defined in the app’s manifest file to advise which actions from a Implicit Intent that it can handle.
Источник
Полный список
В этом уроке мы:
— создадим и вызовем второе Activity в приложении
Урок был обновлен 12.06.2017
Мы подобрались к очень интересной теме. На всех предыдущих уроках мы создавали приложения, которые содержали только один экран (Activity). Но если вы пользуетесь смартфоном с Android, то вы замечали, что экранов в приложении обычно больше. Если рассмотреть, например, почтовое приложение, то в нем есть следующие экраны: список аккаунтов, список писем, просмотр письма, создание письма, настройки и т.д. Пришла и нам пора научиться создавать многоэкранные приложения.
Application/Library name: TwoActivity
Module name: p0211twoactivity
Package name: ru.startandroid.p0211twoactivity
Откроем activity_main.xml и создадим такой экран:
На экране одна кнопка, по нажатию которой будем вызывать второй экран.
Открываем MainActivity.java и пишем код:
Мы определили кнопку btnActTwo и присвоили ей Activity в качестве обработчика. Реализация метода onClick для кнопки пока заполнена частично — определяем, какая кнопка была нажата. Чуть позже здесь мы будем вызывать второй экран. Но сначала этот второй экран надо создать.
Если помните, при создании проекта у нас по умолчанию создается Activity.
От нас требуется только указать имя этого Activity – обычно мы пишем здесь MainActivity. Давайте разбираться, что при этом происходит.
Мы уже знаем, что создается одноименный класс MainActivity.java – который отвечает за поведение Activity. Но, кроме этого, Activity «регистрируется» в системе с помощью манифест-файла — AndroidManifest.xml.
Давайте откроем этот файл:
Нас интересует тег application. В нем мы видим тег activity с атрибутом name = MainActivity. В activity находится тег intent-filter с определенными параметрами. Пока мы не знаем что это и зачем, сейчас нам это не нужно. Забегая вперед, скажу, что android.intent.action.MAIN показывает системе, что Activity является основной и будет первой отображаться при запуске приложения. А android.intent.category.LAUNCHER означает, что приложение будет отображено в общем списке приложений Android.
Т.е. этот манифест-файл — это что-то типа конфигурации. В нем мы можем указать различные параметры отображения и запуска Activity или целого приложения. Если в этом файле не будет информации об Activity, которое вы хотите запустить в приложении, то вы получите ошибку.
Android Studio при создании модуля создала MainActivity и поместила в манифест данные о нем. Если мы надумаем сами создать новое Activity, то студия также предоставит нам визард, который автоматически добавит создаваемое Activity в манифест.
Давайте создадим новое Activity
Жмем правой кнопкой на package ru.startandroid.p0211twoactivity в папке проекта и выбираем New -> Activity -> Empty Activity
В появившемся окне вводим имя класса – ActivityTwo, и layout – activity_two.
Класс ActivityTwo создан.
В setContentView сразу указан layout-файл activty_two.
Он был создан визардом
Откройте activty_two.xml и заполните следующим кодом:
Экран будет отображать TextView с текстом «This is Activity Two».
Сохраните все. Класс ActivityTwo готов, при отображении он выведет на экран то, что мы настроили в layout-файле two.xml.
Давайте снова заглянем в файл манифеста
Появился тег activity с атрибутом name = .ActivityTwo. Этот тег совершенно пустой, без каких либо параметров и настроек. Но даже пустой, он необходим здесь.
Нам осталось вернуться в MainActivity.java и довершить реализацию метода onClick (нажатие кнопки), а именно — прописать вызов ActivityTwo. Открываем MainActivity.java и добавляем строки:
(добавляете только строки 2 и 3)
Обновите импорт, сохраните все и можем всю эту конструкцию запускать. При запуске появляется MainActivity
Нажимаем на кнопку и переходим на ActivityTwo
Код вызова Activity пока не объясняю и теорией не гружу, урок и так получился сложным. Получилось много текста и скриншотов, но на самом деле процедура минутная. Поначалу, возможно, будет непонятно, но постепенно втянемся. Создадим штук 5-6 новых Activity в разных проектах и тема уляжется в голове.
Пока попробуйте несколько раз пройти мысленно эту цепочку действий и усвоить, что для создания Activity необходимо создать класс (который наследует android.app.Activity) и создать соответствующую запись в манифест-файле.
На следующем уроке:
— разбираемся в коде урока 21
— теория по Intent и Intent Filter (не пропустите, тема очень важная)
— немного о Context
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Памятка по жизненному циклу Android — часть I. Отдельные Activity
Android спроектирован так, чтобы использование приложения пользователем было максимально интуитивным. Например, пользователи приложения могут повернуть экран, ответить на уведомление или переключиться на другое приложение, и после этих манипуляций они все так же должны иметь возможность продолжить использовать приложение без каких-либо проблем.
Чтобы обеспечить такое взаимодействие с пользователем, вы должны знать, как управлять жизненными циклами компонентов. Компонентом может быть Activity, Fragment, Service, класс Application и даже сам процесс приложения. Компонент имеет жизненный цикл, в течение которого он проходит через различные состояния. Всякий раз, когда происходит переход, система уведомляет вас об этом при помощи методов жизненного цикла.
Чтобы нам было легче объяснить, как работает жизненный цикл в Android, мы определили несколько сценариев (примеров из жизни), которые сгруппированы по компонентам:
Часть 1: Activity — ЖЦ одного активити (этот пост)
Диаграммы также доступны в виде шпаргалки в формате PDF для краткого ознакомления.
Примечание: эти диаграммы соответствуют поведению в Android P/Jetpack 1.0.
Следующие сценарии демонстрируют поведение компонентов по умолчанию, если не указано иное.
Если вы обнаружили ошибки в статье или считаете, что не хватает чего-то важного, напишите об этом в комментариях.
Часть 1: Activity
Одно Aсtivity — Сценарий 1. Приложение завершено и перезапущено
Будет вызван, если:
Пользователь нажимает кнопку Назад или
Вызван метод Activity.finish()
Самый простой сценарий показывает, что происходит, когда приложение с одним активити запускается, завершается и перезапускается пользователем:
Управление состоянием
onSaveInstanceState не вызывается (поскольку активити завершено, вам не нужно сохранять состояние)
onCreate не имеет Bundle при повторном открытии приложения, потому что активити было завершено и состояние не нужно восстанавливать.
Одно Aсtivity — Сценарий 2. Пользователь уходит
Будет вызван, если:
Пользователь нажимает кнопку «Домой»
Пользователь переключается на другое приложение (через меню «Все приложения», из уведомления, при принятии звонка и т. д.)
В этом случае система остановит активити, но не завершит его сразу.
Управление состоянием
Когда ваше активити переходит в состояние Stopped, система использует onSaveInstanceState для сохранения состояния приложения на тот случай, если впоследствии система завершит процесс приложения (см. ниже).
Предполагая, что процесс не был убит, экземпляр активити сохраняется в памяти, сохраняя все состояние. Когда активити возвращается на передний план, вам не нужно повторно инициализировать компоненты, которые были созданы ранее.
Одно Aсtivity — Сценарий 3. Изменение кофигурации
Будет вызван, если:
Изменена конфигурация, такие как поворот экрана
Пользователь изменил размер окна в многооконном режиме
Управление состоянием
Изменения конфигурации, такие как поворот или изменение размера окна, должны позволить пользователям продолжить работу с того места, где они остановились.
Активити полностью уничтожено, но состояние сохраняется и восстанавливается при создании нового экземпляра.
Bundle в onCreate тот же самый, что и в onRestoreInstanceState .
Одно Aсtivity — Сценарий 4. Приложение приостановлено системой
Будет вызван, если:
Включён многооконный режим (API 24+) и потерян фокус
Другое приложение частично покрывает работающее приложение: диалоговое окно покупки (in-app purchases), диалоговое окно получения разрешения (Runtime Permission), стороннее диалоговое авторизации и т. д.
Появится окно выбора приложения (при обработке неявного интента), например диалоговое окно шейринга.
Этот сценарий не применим к:
Диалогам в том же приложении. Отображение AlertDialog или DialogFragment не приостанавливает базовое активити.
Уведомлениям. Пользователь, получающий новое уведомление или открывающий панель уведомлений, не приостанавливает текущее активити.
Источник