Обработка нажатий

Последнее обновление: 29.03.2024

Объект Modifier позволяет добавить компонентам возможность обработки нажатия. Для этого он предоставляет функцию clickable():

fun Modifier.clickable(
    enabled: Boolean = true,
    onClickLabel: String? = null,
    role: Role? = null,
    onClick: () -> Unit
): Modifier

Параметры функции:

  • enabled: значение типа Boolean, которое указывает, будет ли доступен компонент для нажатия. По умолчанию имеет значение true, то есть компонент будет доступен для нажатия. При значении false обработка нажатий оключена.

  • onClickLabel: предоставляет значение типа String? и задает метку, с помощью которой можно быстро обратиться к компоненту. По умолчанию равен null

  • role: объект типа Role?, который устанавливает тип визуального элемента. По умолчанию равен null

  • onClick: функция типа () -> Unit, которая собственно и обрабатывает нажатие.

Например, определим простейшую обработку нажатия для компонента Text:

package com.example.helloapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.clickable
import androidx.compose.material3.Text
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.sp

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val count = remember{mutableStateOf(0)}

            Text("Clicks: ${count.value}",
                fontSize = 28.sp,
                modifier = Modifier.clickable( onClick = { count.value += 1 })
            )
        }
    }
}

В данном случае мы определяем переменную count, которая будет хранить количество нажатий. Однако это не просто число. Она будет предоставлять - объект типа MutableState<Int>, который создается функцией mutableStateOf(). В дальнейшем мы подробнее разберем объект MutableState и функцию mutableStateOf, а пока достуточно знать, что в эту функцию передается собственно хранимое значение, которое затем можно получить с помощью свойства value объекта MutableState<T>. А функция remember позволяет сохранить это значение.

Обратившись к свойству value мы можем получить значение и вывести его в строке в компоненте Text:

Text("Clicks: ${count.value}"

А в функцию Modifier.clickable через параметр onClick передаем обработчик нажатия, котором это значение увеличивается на единицу:

onClick = { count.value += 1 }

В итоге при нажатии на компонент изменится значение в переменной count и соответственно изменится текст компонента Text.

Modifier.clickable, onClick и обработка нажатия в Jetpack Compose и Kotlin в Android
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850