Android Studio: Переключение между Activity
Рабочая среда Android Studio позволяет протестировать готовое приложение, для этого Вам необходимо создать виртуальное устройство. Для этого перейдите в AVD Manager.
Назовём рабочую область BackActivity.
Теперь мы возвращаемся к MainActivity, и к кнопке «Старт» пишем обработчик, для начала добавим строку:
Можно и в режиме дизайна, указать метод onClick:
Сразу укажем кнопке ID (buttonBack).
После, открываем MainActivity.java, и в метод Create добавляем строку:
Button buttonBack = (Button)findViewById(R.id.buttonBack);
Далее необходимо навести каретку на (Button), вызвать контекстное меню зажав клавиши Alt+Enter и выбрать импорт класса.
Теперь, сразу после, добавим строку:
Программа нам говорит об ошибке, чтобы её исправить нужно отредактировать строку:
public class MainActivity extends AppCompatActivity <
и заменить её на:
public class MainActivity extends AppCompatActivity implements View.OnClickListener<
Теперь добавляем следующие строки:
И импортируем класс Intent (в противном случае выдаст ошибку Cannot find symbol class Intent).
Шалость удалась, у нас есть работающая кнопка, которая переносит нас на новую Activity. Наполнять Activity содержимым буду уже в следующих обзорах.
Источник
Полный список
В этом уроке мы:
— создадим и вызовем второе 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 для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Запуск еще одной activity в android app
После завершение предыдущего урока у Вас уже есть приложение, которое отображает поле для ввода и кнопку. В этом уроке мы добавим некоторые код в главную активность и будем запускать новую активность, когда пользователь нажимает на кнопку.
Чтобы добавить действие при нажатии на кнопку, необходимо для нее указать обработчик события. Обработчик события – это метод, который будет срабатывать при нажатии на кнопку. Есть несколько способов сделать это. Один из них – это указать в xml разметке свойство android:onClick для кнопки. В результате код для кнопки будет следующим:
Android onClick – обработчик события нажатия на кнопку
Значение свойства android:onClick равное «sendMessage» , говорит о том, что при нажатии на кнопку будет срабатывать метод sendMessage в активности, соответствующей экрану. Нам необходимо в классе главной активности ( MainActivity ) добавить соответствующий метод:
Обработчик события при нажатии на пноку
Метод обязательно должен публичным ( public ), возвращать void , принимать объект типа View и чтобы его (тип данных View ) можно было использовать, необходимо добавить импорт: «import android.view.View;» в активность. Можно оптимизировать импорты (добавить необходимые и удалить ненужные), нажав в eclipse следующую комбинацию клавиш: CTRL + SHIFT + O. Или строка с импортом добавляется автоматически, если при написании типа данных вы используете CTRL + SPACE (пробел).
Отображение всплывающей подсказки при нажатии на кнопку
Чтобы убедиться, что обработчик события срабатывает корректно, добавим в метод sendMessage следующий код:
Отображение всплывающей подсказки при нажатии на кнопку в android
Так же необходимо добавить импорт «import android.widget.Toast;» . Дальше я не буду упоминать о необходимости добавлять импорт. Если какой либо тип данных будет подчеркнут красным с ошибкой ” XXX cannot be resolved to a variable”, вероятно Вам необходимо оптимизировать импорты.
В данном обработчике событий я захардкодил строку (указал ее в коде), что нехорошо. Все строки должны быть в отдельном файле ресурсов, я так сделал, чтобы убедиться в работоспособности кода и после этого я напишу другой код.
Думаю, Вы уже запустили приложение и убедились в его работоспособности. Если нет, не сдерживайте себя ;). При нажатии на кнопку send Вы увидите заданную строку.
Создание объекта Intent для запуска новой активности
Объект типа Intent – это объект, который позволяет связывать различные компоненты (например, две различные активности). Интент – это описание какого – то действия приложением. Он может быть использован для широкого круга задач, но в большинстве случаев его используют для запуска другой активности (задачи).
Внутри метода sendMessage(), необходимо создать объект типа Intent , чтобы запустить активность DisplayMessageActivity :
Intent intent = new Intent(this, DisplayMessageActivity.class);
Конструктор, которые используется в нашем случае имеет два входных параметра. Первый – Context (Класс Activity наследуется от класса Context, по-этому передаем текущий объект – главную активность). Второй – класс компонент приложения, которому система передаст управление. В нашем случае класс активности, которую необходимо запустить.
После написания этого кода среда разработки выдаст ошибку т.к. класс DisplayMessageActivity не создан. В скором времени мы это исправим.
Intent позволяет не только запустить активность, но и и передать даже некоторые данные в нее. Сделаем это, взяв текст введенный пользователем с поля для ввода. Для этого необходимо получить само поле ввода в коде с помощью метода findViewById():
Создание intent и запуск новой активности с параметром
В Intent можно поместить множество данных различных типов. Денные хранятся как пара ключ-значение, называемые “extras”. Метод putExtra() принимает два параметра, первый – это ключ, второй – значение.
Чтобы в следующей активности получить данные, необходимо определить ключ как публичную константу (Чтоб доступ к ней был и с отправляющей и принимающей активности). Добавим определение константы EXTRA_MESSAGE в начало класса текущей активности.
Правильно определять публичные константы для передачи параметров в другие активности и хорошей практикой является именование их с использованием именования пакетов приложения. Это позволяет создавать уникальные ключи, что важно, особенно в случае, если Ваше приложение взаимодействует с другими.
Запуск активности
Чтобы запустить другую активность, необходимо вызвать метод startActivity() и передать в него объект типа Intent . Система перехватит этот вызов и запустит активность, указанную в интенте. В результате метод обработки sendMessage() будет следующим:
Android – запуск еще одной активности
Создание второй активности
Для создания новой активити необходимо при нажатии правой кнопкой мыши на проекте/пакете, в котором Вы хотите ее создать выбрать New -> Other. В разделе Android выбираем Android activity и нажимаем “Next”. Далее выбираем BlankActivity и снова “Next”.
Заполним информацию о создаваемой активности. Выбираем проект, вводим имя активити (Activity Name: DisplayMessageActivity), имя файла разметки (Layout Name: activity_display_message), заголовок (Title: My Message), Navigation Type: none (оставляем по-умолчанию ). Hierarchial Parent заполнять нет необходимости, нажимаем “Finish“.
Создание новой activity в android приложении
Если Вы используете другую среду разработки, возможно Вам придется руками создать новый класс (в том же пакете, что и главная активность), и реализовать в нем метод onCreate(). Открыв созданный еклипсой класс, Вы увидите что этот метод уже есть, так же, как и onCreateOptionsMenu(), но сейчас он нам не понадобиться (метод для создания меню мы будем использовать позже), по – этому можно его удалить. В результате активность имеет следующий вид:
Метод onCreate() новой activity
Все Activity должны содержать метод onCreate(). Он вызывается при создании активности, в нем необходимо определить разметку экрана (используя метод setContentView()) и инициализировать все необходимые компоненты.
Если Вы используете другую среду, у вас нет разметки activity_display_message.xml, которая передается в метод setContentView созданной активности. Это нестрашно т.к. мы изменим метод и она нам не понадобиться.
Используя еклипс, она сделала все необходимое для созданий новой активности, разберемся что же она натворила и сделаем это руками, если вы используете другую среду разработки.
Добавление новой строки в ресурсы
Необходимо добавить строку – заголовок для новой активности. Используя еклипс, можете убедиться что она появилась автоматически. В файле строк должно быть новое значение:
Добавление activity в AndroidManifest.xml
В манифесте должны быть задекларированы все активити запускаемые приложением. В результате манифест должен иметь следующий вид:
Обновленный файл AndroidManifest.xml
Если Вы используете еклипс, можете запустить приложение. При нажатии на кнопку отправить запуститься новая активность с надписью “Hello world!”. Если Вы используете другую среду, не переживайте что приложение до сих пор не компилируется, сейчас все поправим ;).
Прием данных с помощью Intent
В метод onCreate новой активити необходимо добавить следующий код, который получает данные из интента:
Отображение сообщения
Чтобы отобразить сообщение, необходимо создать TextView и используя метод setText() сказать ему какой текст нужно отображать. Далее (в коде! не используя файл разметки) созданный TextView установим как корневой элемент экрана активности. В итоге метод onCreate() получиться вот таким вот:
Получение данных из Intent и их отображение
Собственно, вот и все! Если Вы следовали описанным действиям, приложение должно работать корректно.
Источник