Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Разработка приложений под Android. Выпуск 21 от 23.02.2020.


Уважаемые читатели! Перед вами двадцать первый выпуск рассылки по созданию приложений для платформы Android. Сайт рассылки - http://mimags.ru, зеркало - http://inwoo.atwebpages.com.
В данном выпуске продолжим разработку приложения My First App и добавим реакцию на действия пользователя.
У нас есть приложение, состоящее из одного экрана с текстовым полем и кнопкой «Отправить». В этой рассылке добавим некоторый код в MainActivity, который запускает новое действие для отображения сообщения, когда пользователь нажимает кнопку «Отправить». Предполагается, что используется Android Studio версии 3.0 или выше.

Реакция на нажатие кнопки "Отправить".
Выполните следующие действия, чтобы добавить метод в класс MainActivity, который вызывается при нажатии кнопки «Отправить»:

1. В файле app>java>ru.mimags.myfirstapp>MainActivity добавьте следующую заглушку метода sendMessage () :
1.1. При использовании JAVA

public class MainActivity extends AppCompatActivity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 }
 /** Вызывается, когда пользователь нажимает кнопку Отправить */
 public void sendMessage(View view) {
 // Сделать что-то в ответ на нажатие кнопки
 }
}

1.2. При использовании КОТЛИН

class MainActivity : AppCompatActivity() {
 override fun onCreate(savedInstanceState: Bundle?) {
 super.onCreate(savedInstanceState)
 setContentView(R.layout.activity_main)
 }

 /** Вызывается, когда пользователь нажимает кнопку Отправить */
 fun sendMessage(view: View) {
 // Сделать что-то в ответ на нажатие кнопки
 }
}

Вы можете увидеть ошибку (рис. 1), поскольку Android Studio не может распознать класс View, используемый в качестве аргумента метода. Чтобы устранить ошибку, щелкните объявление View, наведите на него курсор, а затем нажмите «Alt» + «Ввод» (или «Option» + «Ввод» на Mac) для выполнения быстрого исправления. Если появится меню, выберите Импортировать класс (рис. 2).

2. Вернитесь в файл activity_main.xml, чтобы вызвать метод с кнопки:
a. Выберите кнопку в редакторе макетов.
b. В окне Attributes найдите свойство OnClick и выберите SendMessage [MainActivity] из его раскрывающегося списка (рис. 3).
Теперь, когда кнопка нажата, система вызывает метод sendMessage ().
Обратите внимание на детали этого метода. Они необходимы для того, чтобы система распознала метод как совместимый с атрибутом android: onClick . В частности, метод имеет следующие характеристики:
∙ Метод должен быть объявлен открытым (public).
∙ Метод должен возвращать void или, в Kotlin, неявное возвращаемое значение единицы .
∙ Метод должен иметь один параметр с типом View.

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


Создайте интент (intent)

Интент является объектом, который обеспечивает связывание во время выполнения между отдельными компонентами, таким как две активности.Интент представляет собой «намерение выполнить некую операцию». Вы можете использовать интент для самых разных задач, но в данной рассылке интент используется для запуска другой активности.
В MainActivity добавьте константу EXTRA_MESSAGE и код sendMessage (), как показано ниже:

при использовании JAVA

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE = "ru.mimags.myfirstapp.MESSAGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

 /** Вызывается, когда пользователь нажимает кнопку Отправить */
    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);
    }
}

при использовании КОТЛИН

const val EXTRA_MESSAGE = "ru.mimags.myfirstapp.MESSAGE"

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

 /** Вызывается, когда пользователь нажимает кнопку Отправить */
    fun sendMessage(view: View) {
        val editText = findViewById<EditText>(R.id.editText)
        val message = editText.text.toString()
        val intent = Intent(this, DisplayMessageActivity::class.java).apply {
            putExtra(EXTRA_MESSAGE, message)
        }
        startActivity(intent)
    }
}



Для исправления ошибки распознания символа intent нажмите Alt + Enter (или «Option» + «Ввод» на Mac). Должны получиться следующие строки импорта:
JAVA
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

KOTLIN
import androidx.appcompat.app.AppCompatActivity
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.EditText

На ошибку DisplayMessageActivity (рис. 4) пока не обращаем внимания, она будет исправлена позже.
Вот что происходит в методе sendMessage ():
∙ Конструктор Intent принимает два параметра, Context и Class. Параметр Context используется первым, потому что класс Activity является подклассом Context. Параметр Class компоненты приложения, к которому система доставляет intent является, в данном случае, новой активностью.
∙ Метод putExtra () добавляет значение EditText в интент. Интент может содержать данные в виде пар ключ/значение - дополнительная информация, которая должна передаваться получателю. Ваш ключ является публичной константой EXTRA_MESSAGE, потому что в следующем действии ключ используется для получения текстового значения. Хорошей практикой является определение ключей для дополнительных функций с именем пакета приложения в качестве префикса. Это гарантирует, что ключи уникальны, если ваше приложение взаимодействует с другими приложениями.
∙ Метод startActivity () запускает экземпляр DisplayMessageActivity, указанный в Intent. Далее вам нужно создать этот класс.
Примечание . Компонент архитектуры навигации позволяет использовать редактор навигации, чтобы связать одно действие с другим. Как только связь установлена, вы можете использовать API для запуска второго действия, когда пользователь запускает соответствующее действие, например, когда пользователь нажимает кнопку. 

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


В избранное