Запуск еще одной activity в android app

By | 05/03/2014

После завершение предыдущего урока у Вас уже есть приложение, которое отображает поле для ввода и кнопку. В этом уроке мы добавим некоторые код в главную активность и будем запускать новую активность, когда пользователь нажимает на кнопку.

Чтобы добавить действие при нажатии на кнопку, необходимо для нее указать обработчик события. Обработчик события – это метод, который будет срабатывать при нажатии на кнопку. Есть несколько способов сделать это. Один из них – это указать в xml разметке свойство android:onClick для кнопки. В результате код для кнопки будет следующим:

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

Отображение всплывающей подсказки при нажатии на кнопку в 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 и запуск новой активности с параметром

В Intent можно поместить множество данных различных типов. Денные хранятся как пара ключ-значение, называемые “extras”. Метод putExtra() принимает два параметра, первый – это ключ, второй – значение.
Чтобы в следующей активности получить данные, необходимо определить ключ как публичную константу (Чтоб доступ к ней был и с отправляющей и принимающей активности). Добавим определение константы EXTRA_MESSAGE в начало класса текущей активности.

Определение константы

Определение константы

Правильно определять публичные константы для передачи параметров в другие активности и хорошей практикой является именование их с использованием именования пакетов приложения. Это позволяет создавать уникальные ключи, что важно, особенно в случае, если Ваше приложение взаимодействует с другими.

Запуск активности
Чтобы запустить другую активность, необходимо вызвать метод startActivity() и передать в него объект типа Intent. Система перехватит этот вызов и запустит активность, указанную в интенте. В результате метод обработки sendMessage() будет следующим:

Android - запуск еще одной активности

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 приложении

Создание новой activity в android приложении

Если Вы используете другую среду разработки, возможно Вам придется руками создать новый класс (в том же пакете, что и главная активность), и реализовать в нем метод onCreate(). Открыв созданный еклипсой класс, Вы увидите что этот метод уже есть, так же, как и onCreateOptionsMenu(), но сейчас он нам не понадобиться (метод для создания меню мы будем использовать позже), по – этому можно его удалить. В результате активность имеет следующий вид:

Метод onCreate() новой activity

Метод onCreate() новой activity

Все Activity должны содержать метод onCreate(). Он вызывается при создании активности, в нем необходимо определить разметку экрана (используя метод setContentView()) и инициализировать все необходимые компоненты.

Если Вы используете другую среду, у вас нет разметки activity_display_message.xml, которая передается в метод setContentView созданной активности. Это нестрашно т.к. мы изменим метод и она нам не понадобиться.

Используя еклипс, она сделала все необходимое для созданий новой активности, разберемся что же она натворила и сделаем это руками, если вы используете другую среду разработки.

Добавление новой строки в ресурсы

Необходимо добавить строку – заголовок для новой активности. Используя еклипс, можете убедиться что она появилась автоматически. В файле строк должно быть новое значение:

    <string name=”title_activity_display_message”>My Message</string>

Добавление activity в AndroidManifest.xml

В манифесте должны быть задекларированы все активити запускаемые приложением. В результате манифест должен иметь следующий вид:

Обновленный файл AndroidManifest.xml

Обновленный файл AndroidManifest.xml

Если Вы используете еклипс, можете запустить приложение. При нажатии на кнопку отправить запуститься новая активность с надписью “Hello world!”. Если Вы используете другую среду, не переживайте что приложение до сих пор не компилируется, сейчас все поправим ;).

Прием данных с помощью Intent

В метод onCreate новой активити необходимо добавить следующий код, который получает данные из интента:

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

Отображение сообщения

Чтобы отобразить сообщение, необходимо создать TextView и используя метод setText() сказать ему какой текст нужно отображать. Далее (в коде! не используя файл разметки) созданный TextView установим как корневой элемент экрана активности. В итоге метод onCreate() получиться вот таким вот:

Получение данных из Intent и их отображение

Получение данных из Intent и их отображение

Собственно, вот и все! Если Вы следовали описанным действиям, приложение должно работать корректно.

Автор

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *