После завершение предыдущего урока у Вас уже есть приложение, которое отображает поле для ввода и кнопку. В этом уроке мы добавим некоторые код в главную активность и будем запускать новую активность, когда пользователь нажимает на кнопку.
Чтобы добавить действие при нажатии на кнопку, необходимо для нее указать обработчик события. Обработчик события – это метод, который будет срабатывать при нажатии на кнопку. Есть несколько способов сделать это. Один из них – это указать в xml разметке свойство android:onClick
для кнопки. В результате код для кнопки будет следующим:
Значение свойства android:onClick
равное "sendMessage"
, говорит о том, что при нажатии на кнопку будет срабатывать метод sendMessage в активности, соответствующей экрану. Нам необходимо в классе главной активности (MainActivity
) добавить соответствующий метод:
Метод обязательно должен публичным (public
), возвращать void
, принимать объект типа View
и чтобы его (тип данных View
) можно было использовать, необходимо добавить импорт: "import android.view.View;"
в активность. Можно оптимизировать импорты (добавить необходимые и удалить ненужные), нажав в eclipse следующую комбинацию клавиш: CTRL + SHIFT + O. Или строка с импортом добавляется автоматически, если при написании типа данных вы используете CTRL + SPACE (пробел).
Отображение всплывающей подсказки при нажатии на кнопку
Чтобы убедиться, что обработчик события срабатывает корректно, добавим в метод sendMessage следующий код:
Так же необходимо добавить импорт "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 можно поместить множество данных различных типов. Денные хранятся как пара ключ-значение, называемые “extras”. Метод putExtra()
принимает два параметра, первый – это ключ, второй – значение.
Чтобы в следующей активности получить данные, необходимо определить ключ как публичную константу (Чтоб доступ к ней был и с отправляющей и принимающей активности). Добавим определение константы EXTRA_MESSAGE
в начало класса текущей активности.
Правильно определять публичные константы для передачи параметров в другие активности и хорошей практикой является именование их с использованием именования пакетов приложения. Это позволяет создавать уникальные ключи, что важно, особенно в случае, если Ваше приложение взаимодействует с другими.
Запуск активности
Чтобы запустить другую активность, необходимо вызвать метод startActivity()
и передать в него объект типа Intent
. Система перехватит этот вызов и запустит активность, указанную в интенте. В результате метод обработки sendMessage() будет следующим:
Создание второй активности
Для создания новой активити необходимо при нажатии правой кнопкой мыши на проекте/пакете, в котором Вы хотите ее создать выбрать 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“.
Если Вы используете другую среду разработки, возможно Вам придется руками создать новый класс (в том же пакете, что и главная активность), и реализовать в нем метод onCreate(). Открыв созданный еклипсой класс, Вы увидите что этот метод уже есть, так же, как и onCreateOptionsMenu(), но сейчас он нам не понадобиться (метод для создания меню мы будем использовать позже), по – этому можно его удалить. В результате активность имеет следующий вид:
Все Activity должны содержать метод onCreate(). Он вызывается при создании активности, в нем необходимо определить разметку экрана (используя метод setContentView()) и инициализировать все необходимые компоненты.
Если Вы используете другую среду, у вас нет разметки activity_display_message.xml, которая передается в метод setContentView созданной активности. Это нестрашно т.к. мы изменим метод и она нам не понадобиться.
Используя еклипс, она сделала все необходимое для созданий новой активности, разберемся что же она натворила и сделаем это руками, если вы используете другую среду разработки.
Добавление новой строки в ресурсы
Необходимо добавить строку – заголовок для новой активности. Используя еклипс, можете убедиться что она появилась автоматически. В файле строк должно быть новое значение:
<string name=”title_activity_display_message”>My Message</string>
Добавление activity в AndroidManifest.xml
В манифесте должны быть задекларированы все активити запускаемые приложением. В результате манифест должен иметь следующий вид:
Если Вы используете еклипс, можете запустить приложение. При нажатии на кнопку отправить запуститься новая активность с надписью “Hello world!”. Если Вы используете другую среду, не переживайте что приложение до сих пор не компилируется, сейчас все поправим ;).
Прием данных с помощью Intent
В метод onCreate новой активити необходимо добавить следующий код, который получает данные из интента:
Intent intent = getIntent(); String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
Отображение сообщения
Чтобы отобразить сообщение, необходимо создать TextView и используя метод setText() сказать ему какой текст нужно отображать. Далее (в коде! не используя файл разметки) созданный TextView установим как корневой элемент экрана активности. В итоге метод onCreate() получиться вот таким вот:
Собственно, вот и все! Если Вы следовали описанным действиям, приложение должно работать корректно.
Автор Аксёненко Богдан