Після попереднього уроку, у вас є додаток, який показує activity (простий екран) з текстовим полем і кнопкою. У цьому уроці ви додасте деякий код до MainActivity, який запускає нову activity, щоб відобразити повідомлення, коли користувач натискає Send ("Надіслати"). Примітка: очікується, що ви використовуєте Android Studio 2.3 або більш нову версію.
Реакція на кнопку Send (НАДІСЛАТИ)
Додайте метод в MainActivity.java, який викликається кнопкою, наступним чином:
1. У файл app > java > com.example.myfirstapp > MainActivity.java, додайте порожній метод sendMessage(), як показано нижче:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/** Called when the user taps the Send button */
public void sendMessage(View view) {
// Do something in response to button
}
}
Ви можете побачити помилку, оскільки Android Studio не може вирішити клас View, який використовується як аргумент методу. Тож клацніть курсором на декларації View, а потім виконайте Quick Fix (Швидке виправлення), натиснувши Alt + Enter (або Option + Enter на Mac). (Якщо з'явиться меню, виберіть Import class.)
2. Тепер поверніться до файлу activity_main.xml, щоб викликати цей метод через кнопку:
1. Клацніть, щоб вибрати кнопку у Layout Editor (редакторі макета).
2. У вікні Properties (Властивості) знайдіть властивість onClick і виберіть із списку, який випадає, sendMessage [MainActivity].
Тепер, коли кнопка використовується, система викликає метод sendMessage().
Зверніть увагу на подробиці цього методу, які необхідні для того, щоб система визнала його сумісним з атрибутом android:onClick. Зокрема, метод повинен оголосити наступне:
• Публічний доступ
• Повернення значення void
• View
як єдиний параметр (це об'єкт View
, на якому натискають)
Далі ви більше заповните цей метод, щоб прочитати вміст текстового поля та додати прочитаний текст до іншої activity.
Будуємо Intent (мету, НАМІР)
Intent
(Намір) - це об'єкт, який забезпечує зв'язок часу виконання між окремими компонентами, такими як дві дії. Intent - це "намір щось зробити". Ви можете використовувати наміри для широкого кола завдань, але в цьому уроці ваш намір просто запускає іншу activity.
У MainActivity.java додайте константу EXTRA_MESSAGE та код sendMessage(), як показано нижче:
public class MainActivity extends AppCompatActivity {
public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/** Called when the user taps the Send button */
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.editText);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
}
Android Studio знову зіткнеться з помилкою Cannot resolve symbol (Неможливо вирішити символ), тому натисніть Alt + Enter (або Option + Return на Mac). Ваш імпорт повинен закінчитися наступним чином:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
Наступна помилка для DisplayMessageActivity, але це нормально і ви її вирішите в наступному розділі.
Ось що відбувається в sendMessage():
• Конструктор Intent має два параметри:
o Context
як його перший параметр (використовується this тому, що клас Activity є підкласом Context)
o Class
компоненту додатка, до якого система повинна застосувати Intent (у цьому випадку, діяльність, яку слід розпочати).
• Метод putExtra() додає значення EditText до Intent. Intent може переносити типи даних як пари ключових значень, що називаються extras (додатковими). Ваш ключ - загальнодоступна константа EXTRA_MESSAGE, оскільки наступна activity використовує ключ, щоб отримати текстове значення. Рекомендується визначати ключі для extras намірів, використовуючи назву пакета додатка як префікс. Це гарантує, що ключі будуть унікальними, якщо ваш додаток взаємодіє з іншими додатками.
• Метод startActivity() запускає екземпляр DisplayMessageActivity, визначений в Intent. Тепер вам потрібно створити цей клас.
Створення другої Activity
1. У вікні Project клацніть правою кнопкою миші папку app та виберіть New > Activity > Empty Activity.
2. У вікні Configure Activity введіть "DisplayMessageActivity" для Activity Name та натисніть кнопку Finish (залиште всі інші властивості встановленими за замовчуванням).
Android Studio автоматично робить три речі:
• Створює файл DisplayMessageActivity.java.
• Створює відповідний файл макета activity_display_message.xml.
• Додає необхідний елемент <activity>
в AndroidManifest.xml.
Якщо ви запустите додаток і натиснете кнопку на першій activity, то запускається друга activity, але вона порожня. Це тому, що друга activity використовує порожній макет, наданий шаблоном.
ДОДаємо вигляд для текста
Рис 1. Текст розташовано у верхній частині макета
Нова activity включає в себе порожній файл макета, тому тепер треба додати вигляд тексту, на якому з'явиться повідомлення.
1. Відкрийте файл app > res > layout > activity_display_message.xml.
2. На панелі інструментів натисніть Turn On Autoconnect (Автоматичне підключення).
3. З вікна Pallete перетягніть TextView в макет і помістіть його біля вершини макета, розташувавши поблизу центру, щоб він центрувався по вертикальній лінії, яка з'являється, а потім залиште. Autoconnect додає обмеження для розміщення вигляду в горизонтальному центрі.
4. Створіть ще одне обмеження у верхній частині вікна вигляду тексту у верхній частині макета, щоб він виглядав, як показано на рис.1.
Можете зробити певні коригування стилю тексту шляхом розширення textAppearance у вікні Properties, змінивши такі атрибути, як textSize та textColor.
Відображення повідомлення
Тепер ви будете змінювати другу activity, щоб відобразити повідомлення, яке було передано першою activity.
1. В DisplayMessageActivity.java додайте наступний код до методу onCreate():
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
// Get the Intent that started this activity and extract the string
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
// Capture the layout's TextView and set the string as its text
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(message);
}
2. Натисніть Alt + Enter (або Option + Return на Mac), щоб імпортувати відсутні класи. Ваші імпорти повинні закінчуватися наступним чином:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.TextView;
ДОдаємо навігацію
Кожен екран у вашому додатку, який не є головним входом (усі екрани, які не є екраном "home"), повинні забезпечувати навігацію, щоб користувач міг повернутися до логічного батьківського екрана в ієрархії додатків, натискаючи кнопку Up на панелі програм.
Все, що вам потрібно зробити, це оголосити у файлі AndroidManifest.xml, яка саме activity є логічним батьком. Тож відкрийте файл app > Manifests > AndroidManifest.xml, знайдіть тег <activity> для DisplayMessageActivity і замініть його наступним:
<activity android:name=".DisplayMessageActivity"
android:parentActivityName=".MainActivity" >
<!-- The meta-data tag is required if you support API level 15 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
Система Android тепер автоматично буде додавати кнопку Up на панелі програм.
Запускаємо додаток
Тепер запустіть додаток ще раз, натиснувши Apply Changes на панелі інструментів. Коли він відкриється, введіть повідомлення в текстовому полі та натисніть Send, щоб побачити повідомлення, яке з'явиться у другій activity.
Рис 2. Скріншоти обох activity
Ось так ви створили свій перший додаток для Android!
Щоб продовжити вивчати основи розробки додатків Android, перейдіть до наступного уроку.
(Оновлено 22.10.2017)
Попередній урок – Наступний урок
(Джерело: developer.android.com)