Запуск другого явления

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

Обработка нажатия на кнопку

  1. В Android Studio откройте файл res/layout/activity_my.xml
  2. Добавьте элементу <Button> атрибут android:onClick

    res/layout/activity_my.xml

    Значение "sendMessage" атрибута android:onClick, это название метода в MyActivity, который будет вызван при нажатии на кнопку.

  3. Откройте файл java/com.mycompany.myfirstapp/MyActivity.java
  4. Добавьте метод sendMessage в класс MyActivity, как показано ниже

    java/com.mycompany.myfirstapp/MyActivity.java

    Для того, чтобы система сопоставила данный метод и имя метода, указанное в атрибуте android:onClick, метод должен удовлетворять следующим условиям:

    • Быть публичным (public).
    • Возвращать тип void.
    • Иметь иденственный параметр типа View (в параметр передается объект View, который вызвал метод).

    Далее мы напишем тело метода для передачи текста из поля ввода в другое явление.

    Создание намерения (Intent)

    1. В файле MyActivity.java создайте объект намерения типа Intent внутри метода sendMessage(). С помощью данного намерения мы будем запускать явление под названием DisplayMessageActivity.

      java/com.mycompany.myfirstapp/MyActivity.java

      Примечание: Ссылка на DisplayMessageActivity вызовет ошибку в Android Studio, поскольку мы еще не создали класс с таким именем. Не беспокойтесь, скоро мы это сделаем.

      Конструктор принимает два параметра:

      • Первый параметр типа Context. Мы можем использовать this, поскольку класс Activity является наследником класса Context.
      • Второй параметр типа Class указывает на компонент, к которому будет обращено данное намерение (В нашем случае явление, которое должно быть запущено).

      Что такое намерение (Intents)

      Намерение это объект, который выполняет связывание двух различных компонентов (например двух явлений). Намерения применяются для широкого спектра задач, но наиболее часто вы будете их использовать для запуска явлений. Подробную информацию смотрите в разделе Явления и фильтры.

    2. Добавьте в начало файла импорт класса Intent:

      java/com.mycompany.myfirstapp/MyActivity.java

      Совет: В Android Studio нажмите Alt+Enter (option + return на Mac), чтобы импортировать недостающие классы.

    3. Внутри sendMessage() создайте объект типа EditText, и воспользуйтесь методом findViewById() для получения ссылки на текстовое поле из нашей разметки.

      java/com.mycompany.myfirstapp/MyActivity.java

    4. Добавьте в начало файла импорт класса EditText.
    5. Локальной переменной message присвойте значение из текстового поля и передайте это значение в намерение при помощи метода putExtra():

      java/com.mycompany.myfirstapp/MyActivity.java

      Класс Intent позволяет передавать пары ключ-значение, называемые дополнительными данными. Метод putExtra() принимает первым параметром ключ, а вторым параметром значение.

    6. Объявите внутри класса MyActivity переменную EXTRA_MESSAGE следующим образом:

      java/com.mycompany.myfirstapp/MyActivity.java

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

    7. Внутри метода sendMessage() добавьте вызов startActivity() и передайте в качестве параметра созданный объект Intent.

      Законченный метод sendMessage(), вызываемый при нажатии кнопки теперь выглядит так:

      java/com.mycompany.myfirstapp/MyActivity.java

    Система обрабатывает вызов и запускает экземпляр класса Activity, заданный в объекте типа Intent. Теперь чтобы все заработало, нам нужно создать класс DisplayMessageActivity.

    Создание второго явления

    Все наследники класса Activity должны реализовывать метод onCreate(). В данном методе явление получает и обрабатывает данные от намерений и выполняет первоначальную настройку всех компонентов явления. Также в методе onCreate() должен вызываться метод setContentView() для выбора файла разметки данного явления.

    Создание нового явления в Android Studio

    Android Studio автоматически добавляет заготовку метода onCreate() при создании нового явления.

    1. В Android Studio щелкните правой кнопкой мыши по пакету java/com.mycompany.myfirstapp и выберите New > Activity > Blank Activity.
    2. В окне Choose options заполните поля:
      • Activity Name (Название явления): DisplayMessageActivity
      • Layout Name (Название разметки): activity_display_message
      • Title (Заголовок): Моё сообщение
      • Hierarchical Parent (Родительский элемент): com.mycompany.myfirstapp.MyActivity
      • Package name (Название пакета): com.mycompany.myfirstapp

      Нажмите Finish.

    3. Откройте файл DisplayMessageActivity.java.

      Как видите, обязательный метод onCreate() уже создан. Позже мы добавим в него нужный код. Также по умолчанию добавлен метод onOptionsItemSelected(), в котором описываются правила работы панели инструментов. Оставьте пока все как есть.

    4. Удалите метод onCreateOptionsMenu(), в данном приложении он не понадобится.

      Если вы работаете в Android Studio, то сейчас уже можете запустить обновленное приложение. При нажатии на кнопку будет открываться второе явление, однако надпись в нем не будет меняться. Дальше мы допишем наше новое явление, чтобы оно открывалось с текстом, введенным в поле ввода.

    Создание явления без Android Studio

    Для создания явления вы можете использовать любую другую среду разработки или командную строку.

    1. Создайте новый файл DisplayMessageActivity.java в директории src/ вашего проект.
    2. Добавьте в файл следующий код:

      Примечание: Если вместо Android Studio вы используете какую-либо другую среду разработки, то в вашем проекте может не быть файла разметки activity_display_message, который передается первым параметром в setContentView(). Не волнуйтесь, позже мы исправим эту проблему.

    3. Добавьте название нового явления в файл strings.xml:
    4. Добавьте в секцию <application> файла AndroidManifest.xml новый элемент <activity>. Это элемент для нашего класса DisplayMessageActivity.

      Атрибут android:parentActivityName указывает на родительский элемент явления. Система использует эти данные для установки правил навигации внутри приложения, таких как Иерархическая навигация в Android 4.1 (уровень API 16) и выше. Вы можете создать такую же навигацию и для старых версий Android, используя библиотеку поддержки и добавив элемент <meta-data> в AndroidManifest.xml.

      Примечание: Если вы следовали инструкции по установке дополнительных пакетов SDK, ваш Android SDK уже включает в себя последнюю версию библиотеки поддержки. При использовании Android Studio, библиотека поддержки автоматически добавляется к вашему проекту (вы можете увидеть jar файл в списке зависимостей). Если вы не используете Android Studio, вам нужно добавить файлы библиотеки вручную. Инструкцию вы можете посмотреть в разделе Добавление библиотеки поддержки.

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

    Получение намерения

    Любое явление запускается с помощью намерения, независимо от используемых элементов навигации. Вы можете получить экземпляр объекта намерения Intent, запустивший явление с помощью метода getIntent(). Экземпляр Intent будет содержать также все дополнительные данные.

    1. Откройте файл java/com.mycompany.myfirstapp/DisplayMessageActivity.java.
    2. В методе onCreate() удалите следующую строку:
    3. Создайте переменную типа Intent и присвойте ей значение getIntent().
    4. В верхней части файла импортируйте класс Intent.

      В Android Studio нажмите сочетание клавиш Alt+Enter (option + return на Mac) для импорта недостающих классов.

    5. Получить дополнительные данные строкового типа, переданные из MyActivity, можно с помощью метода getStringExtra().

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

    1. Создайте объект типа TextView в методе onCreate()
    2. Установите размер шрифта и сообщение с помощью метода setText():
    3. Мы можем сделать объект типа TextView корневым элементом разметки явления. Для этого передадим объект в качестве параметра метода setContentView().
    4. Импортируйте класс TextView.

      В Android Studio нажмите сочетание клавиш Alt+Enter (option + return на Mac) для импорта недостающих классов.

      Теперь метод onCreate() класса DisplayMessageActivity должен выглядеть следующим образом:

      Теперь вы можете запустить приложение. После запуска введите любой текст в поле ввода и нажмите кнопку Отправить. Сообщение откроется во втором явлении.

      Поздравляем! Вы создали свое первое приложение под Android!

      Чтобы узнать больше о разработке для Android, начните изучение следующего урока Добавление панели инструментов.

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