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

 

Ответить на кнопку Отправить


Чтобы ответить на событие нажатия кнопки, откройтеfragment_main.xml файла макета и добавьте android:onClick атрибут к <Button> элементу:

 

android:onClick значение атрибута, "sendMessage", это имя метода в вашей активити , который система вызывает когда пользователь нажимает кнопку.

Откройте MainActivity класс (расположенный в каталоге проекта src/ ) и добавьте соответствующий метод:

 

Чтобы система смогла найти этот метод с именем, заданным в android:onClick, сигнатура должна быть именно такой, как вы видели. В частности, метод должен:

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

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

 

Создать Intent


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

Внутри sendMessage() метода, создайте Intent для запуска активити под названиемDisplayMessageActivity:

 

Для этого требуется импортировать Intent класс:

 

Полезный совет: В Eclipse, нажмите Ctrl + Shift + O для импортирования недостающих классов (Cmd + Shift + O на Mac). В Android Studio команда для импорта Alt+Enter.

Конструктор, используемый здесь принимает два параметра:

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

Примечание: Ссылка на DisplayMessageActivityвызовет ошибку, если вы используете интегрированную среду разработки, такую как Eclipse например, потому что класс еще не существует. Игнорируйте ошибку на данный момент; вы скоро создадите класс.

Intent не только позволяет начать другую Activity, но также может выполнять связь данных в Activity. В sendMessage() методе, используйте findViewById() для получения EditText элемента и добавьте его текстовое значение в Intent:

 

Примечание: Вам необходим оператор импорта для android.widget.EditText. Вы определитеEXTRA_MESSAGE константу буквально сейчас.

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

Для того, чтобы Activity смогла запросить дополнительные данные, вы должны определить ключ для дополнений вашего интента, используя общедоступную константу. Так что добавьте EXTRA_MESSAGE определение в начало MainActivity класса:

 

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

 

Запуск второй Activity


Для запуска активити, вызовите startActivity() и передайте в него ваш Intent. Система получает этот вызов и запускает экземпляр Activity указанный в Intent.

С помощью этого нового кода, полный sendMessage() метод, который вызывается кнопкой Отправить теперь выглядит следующим образом:

 

Теперь вам нужно создать DisplayMessageActivity класс для того, чтобы это работало.

 

Создание второй Activity


Для создания новой Activity в Android Studio:

В главном меню выберите File>New>Activity>Blank Activity.

Заполните поля в окне мастера создания активити:

  • Activity Name: DisplayMessageActivity
  • Layout Name: activity_display_message
  • Title: Моё сообщение
  • Hierarchial Parent: com.example.myfirstapp.MainActivity

Остальные поля оставьте по умолчанию. Нажмите Finish.

Для создания новой Activity в Eclipse:

  • Нажмите New на панели инструментов.
  • В появившемся окне, откройте Android папку и выберите Android Activity. Нажмите Next.
  • Выберите BlankActivity и нажмите Next.
  • Заполните информацию о Activity:
    • Project: MyFirstApp
    • Activity Name: DisplayMessageActivity
    • Layout Name: activity_display_message
    • Fragment Layout Name: fragment_display_message
    • Title: Моё сообщение
    • Hierarchial Parent: com.example.myfirstapp.MainActivity
    • Navigation Type: None

    Нажмите Finish.

 

Рисунок 1. Мастер новой активити в Eclipse.

Если вы используете инструменты командной строки, создайте новый файл с именем DisplayMessageActivity.java в проекте в src/ каталоге, рядом с оригиналом MainActivity.java файлом.

Откройте DisplayMessageActivity.java файл. Если вы использовали Android Studio или Eclipse для создания этой Activity:

  • Класс уже включает в себя реализацию требуемого onCreate() метода. Вы обновите реализацию этого метода позже.
  • Есть также реализация onCreateOptionsMenu() метода, но вам это не будет нужно в данном приложении, так что вы можете удалить его.
  • Есть также реализация onOptionsItemSelected() , который обрабатывает поведение панели действий для кнопки Вверх . Оставьте его как есть.
  • Может быть также PlaceholderFragment класс, который расширяет Fragment. Вам не нужен будет этот класс в окончательном варианте этой активити .

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

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

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

 

Если вы использовали среду разработки, отличную от Android Studio или  Eclipse, обновите ваш DisplayMessageActivityкласс согласно коду приведенного выше.

Все подклассы Activity должны реализовать onCreate() метод. Система вызывает его при создании нового экземпляра активити . В этом методе вы должны определить макет активити с помощью setContentView() метода, и здесь вы должны выполнить начальную настройку компонентов активити .

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

Добавить строку заголовка

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

Иначе, добавьте заголовок для новой активити в strings.xml файл:

 

Добавьте её в манифест

Все Activity должны быть объявлены в файле манифеста, AndroidManifest.xml, c использованием тега <activity> .

При использовании Android Studio или  Eclipse для создания своей Activity, запись в манифесте создается по умолчанию. В других случаях можно добавить запись в манифест самим. Это должно выглядеть следующим образом:

 

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

Примечание: Ваш Android SDK уже должен включать последнюю версию Библиотеки Поддержки Android. Он включен в пакет ADT, но если вы используете другой IDE, он должен был быть установлен на шаге Добавление платформ и пакетов . В Android Studio и  Eclipse, Библиотека Поддержка автоматически добавляется в ваше приложение проекта (вы можете увидеть JAR файл библиотеки, перечисленный в Зависимости Android). Если вы не используете Eclipse, вам нужно вручную добавить библиотеку в проект — следуйте инструкциям в руководстве настройка библиотеки поддержки , а затем вернитесь сюда.

Если вы разрабатываете на Android Studio или  Eclipse, вы можете запустить приложение сейчас, но ничего такого не произойдет. При нажатии на кнопку Отправить запустится вторая активность, но она использует по умолчанию макет «Привет мир», предоставленный шаблоном. Вы скоро обновите активити , чтобы вместо этого отображать настраиваемое представление текста, так что если вы используете другую среду разработки, не волнуйтесь, что приложение еще не будет компилироваться.

 

Получение Интента


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

В DisplayMessageActivity класса onCreate() метод, получает интент и извлекает сообщение доставленное MainActivity:

 

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


Для отображения сообщения на экране, создайте TextView виджет и установите текст с помощьюsetText(). Затем добавьте TextView в качестве корневого представления макета активити , передав его в setContentView().

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

 

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

Рисунок 2. Две активити в законченном приложении, работающие на Android 4.4.

Вот и все, вы создали своё первое Android приложение!

Чтобы узнать больше, перейдите по  ссылке на следующий курс.

Запуск другой Activity — второго окна android-приложения обновлено: Ноябрь 23, 2015 автором: admin

  1. а для чего нужны методы onOptionItemSelected и PlaceHolderFragment ?
    Я еще далек от понимания, но мне кажется, они тут лишние.

    что делает? if (savedInstanceState == null){
    getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceHolderFragment()).commit();
    }

  2. Посмотрите уроки по работе с фрагментами — станет понятнее

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

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

*
*
Website