Запуск іншої Activity - другого вікна android-програми

У цьому уроці

Ви також повинні прочитати

Після завершення попереднього уроку, у вас є програма, яка показує активіті (один екран) з текстовим полем та кнопкою. У цьому уроці ви додамо код MainActivity , який запустить нову активіті , коли користувач натисне кнопку Відправити.

Відповісти на кнопку Надіслати

Щоб відповісти на подію, натиснувши кнопку, відкрийте fragment_main.xml файлу макета і додайте android:onClick атрибут до елемента:

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 (в даному випадку активність, яка має бути запущена)

Надсилання 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, з використанням тега.

При використанні Android Studio або Eclipse для створення своєї Activity запис у маніфесті створюється за замовчуванням. В інших випадках можна додати запис до маніфесту самим. Це має виглядати так:

Атрибут android:parentActivityName оголошує ім'я батьківської Activity у рамках логічної ієрархії програми. Система використовує це значення для реалізації поведінки навігації за умовчанням, такого як навігація на Android 4.1 (Рівень API 16) і вище. Ви можете реалізувати таку ж поведінку навігації для старіших версій Android, використовуючи Бібліотеку Підтримки та додавши елемент, як показано тут.

Примітка: Ваш 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 додаток!

Щоб дізнатися більше, перейдіть на наступний курс.