Телефонуйте » (+38) 096 227 41 41

Вже маємо додаток, який показує activity (один екран) з текстовим полем і кнопкою. Тепер додамо деякий код до MyActivity, який запускатиме нову activity при натисканні кнопки Send.

Реакція на кнопку Send (Відправити)

1. В Android Studio у каталозі res/layout відредагуйте файл activity_my.xml.
2. До елемента <Button> додайте атрибут android:onClick.
res/layout/activity_my.xml
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:onClick="sendMessage" />

Значення атрибуту android:onClick "sendMessage" є ім'ям методу у вашій activity, яку система викликає, коли користувач натискає на кнопку.
3. У каталозі java/com.mycompany.myfirstapp відкрийте файл MyActivity.java.
4. У класі MyActivity додайте до методу sendMessage() заглушку, як показано нижче.
java/com.mycompany.myfirstapp/MyActivity.java
/** Викликається, коли користувач натискає кнопку Send */
public void sendMessage(View view) {
    // Що небудь зробити у відповідь на натискання кнопки
}

Для того, щоб припасувати до системи, щоб цей метод відповідав імені методу, даного в android:onClick, підпис має бути саме таким, як показано. Зокрема, метод повинен:

·    Бути публічним
·    Мати значення, що повертаються пустими
·    Мають View як лише параметр (це буде View, коли була натиснута кнопка)

Далі, ви заповните в цьому методі, щоб прочитати вміст текстового поля і доставити цей текст в іншу activity.

Будуємо Intent (мету)

1. У MyActivity.java, всередині методу sendMessage() створіть Intent для запуску activity під назвою DisplayMessageActivity за допомогою наступного коду:
java/com.mycompany.myfirstapp/MyActivity.java
public void sendMessage(View view) {
  Intent intent = new Intent(this, DisplayMessageActivity.class);
}

Intents

Intent (мета, намір) – це об'єкт, який забезпечує виконання зв’язків між окремими компонентами (наприклад, між двома activity). Intent являє "намір щось зробити". Ви можете використовувати Intent для широкого кола завдань, але найчастіше вони використовуються, щоб запустити іншу activity.
Примітка: посилання на DisplayMessageActivity викличе помилку, якщо ви використовуєте таку IDE, як Android Studio, тому що клас ще не існує. Ігноруйте помилку зараз - ви створите клас найближчим часом.
Конструктор, використаний тут, приймає два параметри:
·    Context - як перший параметр (використовується тому, що клас Activity є підкласом Context)
·    Class - компонента додатку, до яких система повинна доставити Intent (в даному випадку activity, яка повинна бути запущена)
Android Студія показує, що ви повинні імпортувати клас Intent.

2. У верхній частині файлу, імпортуйте клас Intent:
java/com.mycompany.myfirstapp/MyActivity.java
import android.content.Intent;
Порада: У Android Studio натисніть Alt + Enter (option + return на Mac), щоб імпортувати відсутні класи.
3. У методі sendMessage() використайте findViewById(), щоб отримати елемент EditText.
java/com.mycompany.myfirstapp/MyActivity.java
public void sendMessage(View view) {
  Intent intent = new Intent(this, DisplayMessageActivity.class);
  EditText editText = (EditText) findViewById(R.id.edit_message);
}

4. У верхній частині файлу імпортуйте клас EditText.
У Android Studio натисніть Alt + Enter (option + return на Mac), щоб імпортувати відсутні класи.
5. Призначте текст для локальної змінної message, а також використайте метод putExtra(), щоб додати його текстове значення в intent.
java/com.mycompany.myfirstapp/MyActivity.java
public void sendMessage(View view) {
  Intent intent = new Intent(this, DisplayMessageActivity.class);
  EditText editText = (EditText) findViewById(R.id.edit_message);
  String message = editText.getText().toString();
  intent.putExtra(EXTRA_MESSAGE, message);
}

Intent може нести типи даних у вигляді пар ключ-значення, так званий extras. Метод putExtra() приймає ім'я ключа, як перший параметр, і значення, як другий параметр.
6. У верхній частині класу MyActivity, додайте визначення EXTRA_MESSAGE наступним чином:
java/com.mycompany.myfirstapp/MyActivity.java
public class MyActivity extends ActionBarActivity {
    public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE";
    ...
}

Для наступної activity для запиту додаткових даних ви повинні визначити ключ для використанням свого intent's extra відкриту константу. Це взагалі хороша практика, щоб визначити ключі для intent's extra, використовуючи ім'я пакета свого додатку як префікса. Це гарантує, що ключі унікальні, у разі взаємодії вашого додаток з іншими додатками.
7. У методі sendMessage(), щоб завершити intent викличте метод startActivity(), передаючи йому об'єкт Intent, створений на кроці 1.
З цим новим кодом, повний метод sendMessage(), який викликається за допомогою кнопки Send, тепер виглядає наступним чином:
java/com.mycompany.myfirstapp/MyActivity.java
/** Викликається, коли користувач натискує кнопку Send */
public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

Система отримує цей виклик і запускає екземпляр Activity, зазначений Intent. Тепер вам потрібно створити клас DisplayMessageActivity для того, щоб це працювало.

Створення другої Activity

Всі підкласи Activity повинні реалізувати метод onCreate(). Це метод, в якому activity отримує intent з повідомленням, а потім відображає повідомлення. Крім того, метод onCreate() повинен визначити макет activity за допомогою методу setContentView(). Це де activity виконує початкову установку компонентів activity.

Створення нової activity, використовуючи Android Studio


Майстер нової activity в Android Studio.

Android Studio включає в себе заглушку для методу onCreate(), коли ви створюєте нову activity.
1. В Android Studio, в каталозі java виділіть пакет com.mycompany.myfirstapp, клацніть правою кнопкою миші на ньому і виберіть New > Activity > Blank Activity.
2. У вікні Choose options (Вибір опцій), заповніть деталі activity:

·    Activity Name: DisplayMessageActivity
·    Layout Name: activity_display_message
·    Title: My Message
·    Hierarchical Parent: com.mycompany.myfirstapp.MyActivity
·    Package name: com.mycompany.myfirstapp

Натисніть Finish (Готово).
3. Відкрийте файл DisplayMessageActivity.java.
Клас вже включає в себе реалізацію методів, необхідних onCreate(). Ви відновите реалізації цього методу пізніше. Він також включає в себе реалізацію onOptionsItemSelected(), яка налаштовує властивості панелі дій. Збережіть ці два методи, оскільки вони є в даний час.
4. Видаліть метод onCreateOptionsMenu().
Ви не будете мати потребу в ньому для цього додатку.
Якщо ви розробляєте з Android Studio, то можете запустити додаток зараз, але багато не буває. При натисканні на кнопку Send запускається друга activity, але вона використовує за замовчуванням макет "Hello world", наданий шаблоном. Незабаром ви оновите activity, щоб замість цього відображався налаштований користувачем текст.

Створення activity без Android Studio

Якщо ви використовуєте інший IDE або інструменти командного рядка, то виконайте такі дії:
1. Створіть новий файл з ім'ям DisplayMessageActivity.java в каталозі src/ проекту, поруч з оригінальним файлом MyActivity.java.
2. Додайте наступний код в файл:
public class DisplayMessageActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Пункт панелі дії обробляється тут. Панель дії буде
        // автоматично обробляти натискання кнопки Home/Up, доти
        // поки ви не вкажете батьківську activity в AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * Фрагмент прототипу, що містить простий вигляд.
     */
    public static class PlaceholderFragment extends Fragment {


        public PlaceholderFragment() { }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                  Bundle savedInstanceState) {
              View rootView = inflater.inflate(R.layout.fragment_display_message,
                      container, false);
              return rootView;
        }
    }
}

Примітка: Якщо ви використовуєте інший IDE, а не Android Studio, то ваш проект не містить макет activity_display_message, який запитує setContentView(). Це нормально, тому що ви оновите цей метод пізніше і не використовуватимете даний макет.
3. У вашому файлі strings.xml додайте заголовок нової activity, як показано нижче:
<resources>
    ...
    <string name="title_activity_display_message">My Message</string>
</resources>

4. У вашому файлі маніфесту AndroidManifest.xml в елементі Application додайте елемент <activity> для вашого класу DisplayMessageActivity, а саме:
<application ... >
    ...
    <activity
        android:name="com.mycompany.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.mycompany.myfirstapp.MyActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.mycompany.myfirstapp.MyActivity" />
    </activity>
</application>

Атрибут android:parentActivityName оголошує ім'я батьківської activity для даної activity в рамках логічної ієрархії додатку. Система використовує це значення для реалізації навігації поведінки за замовчуванням, такої як створення навігації по Android 4.1 (рівень API 16) і вище. Ви можете надати ту ж навігаційну поведінку для більш старих версій Android, використовуючи бібліотеку підтримки і додавання елемента <meta-data>, як показано тут.
Примітка: Ваш Android SDK вже повинен включати в себе новітню Android Support Library, яка встановлюється при додаванні пакетів SDK. При використанні шаблонів в Android Studio бібліотека підтримки буде автоматично додана в ваш проект додатку (ви можете побачити бібліотечний файл JAR, перерахований в Android залежностях). Якщо ви використовуєте не Android Studio, то потрібно вручну додати бібліотеку в свій проект, дотримуючись інструкцій в керівництві по налаштуванню бібліотеки підтримки, і повернутися сюди.
Якщо ви використовуєте інший IDE, ніж Android Studio, не хвилюйтеся, що додаток ще не буде зібраний. Ви скоро оновите activity для відображення користувальницького вигляду тексту.

Отримання Intent

Кожна Activity посилається на Intent, незалежно від того, як користувач там переміщується. Ви можете отримати Intent, коли запускаєте свою activity, шляхом виклику getIntent() і витягнути дані, що містяться в intent.
1. У каталозі java/com.mycompany.myfirstapp відредагуйте файл DisplayMessageActivity.java.
2. У методі onCreate() видаліть такий рядок:
setContentView(R.layout.activity_display_message);
3. Отримайте intent і призначте йому локальну змінну.
Intent intent = getIntent();
4. У верхній частині файлу імпортуйте клас Intent.
В Android Studio, натисніть Alt + Enter (option + return на Mac), щоб імпортувати відсутні класи.
5. Витягніть повідомлення, яке доставлене через MyActivity методом getStringExtra().
String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);

Відображення повідомлення

1. У методі onCreate() створіть об'єкт TextView.
TextView textView = new TextView(this);
2. Встановіть розмір тексту і повідомлення з setText().
textView.setTextSize(40);
textView.setText(message);

3. Потім додайте TextView, як кореневий вигляд макету activity, передавши його в setContentView().
setContentView(textView);

4. У верхній частині файлу імпортуйте клас TextView.
В Android Studio натисніть Alt + Enter (option + return на Mac), щоб імпортувати відсутні класи.
Повний метод onCreate() для DisplayMessageActivity тепер виглядає наступним чином:
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Отримайте повідомлення з intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);

    // Створіть вигляд тексту
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    // Задайте вигляд тексту як макет activity
    setContentView(textView);
}

Можете запустити програму. Коли вона відкриється, введіть повідомлення у текстовому полі, натисніть Send (Відправити) і на другій activity з'явиться повідомлення.


Обидві activity в фіналі програми, що працює на Android 4.4.

Тепер можна вважати закінченим створення власного першого Android-додатку!
(Джерело: developer.android.com)

Новини

  • Модуль SMARC запускає Android або Linux на Snapdragon 820
    Модуль SMARC запускає Android або Linux на Snapdragon 820

    SMART 2.0 "Snapdragon 820 SOM" iWave має 3 Гб LPDDR4, 32 Гб eMMC, Wi-Fi та Bluetooth, а також вхідні/вихідні виводи, включаючи GbE, HDMI 2.0, MIPI-CSI, USB 3.0 та PCIe. Комп'ютер розміром 82x50 мм працює на ОС Android Snailbone або вище, з наступною підтримкою Linux. Snapdragon 820 об'єднує чотири 14-нм Cortex з технологією FinFET - два на частоті 2,15 ГГц, а два з 1,6 ГГц, які намагаються імітувати високоякісні Cortex-A72. Крім того, SoC оснащений 624 МГц Adreno 530 GPU, Hexagon 680 DSP і 14-розрядним ISP для Spectra. Snapdragon 820 SOM підтримує кодування H.265 4K@60 та кодування 4K@30.

    in Новини

Записатися на курс