#android #android-jetpack-compose #android-context
Вопрос:
У меня есть фрагмент текста, который я хочу вызвать функцией X при нажатии. Для этого я использую кликабельный модификатор и вызываю функцию X в методе onClick. Однако функция X использует контекст.
Чтобы решить эту проблему, я использую подход, описанный ниже:
@Composable
fun ClickableText() {
val context = LocalContext.current
Text("Click me!", Modifier.clickable { functionX(context) })
}
Мой вопрос в том, есть ли что-то неправильное в таком подходе? Кажется, это работает, но хранение локальной ссылки на localContext.current кажется немного банальным. Если контекст когда-либо изменится за время между составом пользовательского интерфейса и вызовом метода onClick, я бы предположил, что это может вызвать некоторые проблемы. Есть ли лучший способ получить контекст в несоставляемой функции обратного вызова?
Ответ №1:
Нет, это совершенно правильный способ использования LocalContext.current
. Он не может меняться между перекомпозицией и onClick
.
Context
создается перед составным представлением: обычно это ваша деятельность, и если вы используете Hilt, это может быть оболочка контекста , но она создается один раз раньше setContent
, поэтому, если она изменится, вся иерархия представления компоновки будет перестроена.
Вы не должны хранить его вне представления, как в моделях представлений, но захватывать его внутри композиционного материала совершенно нормально.
Комментарии:
1. в этом есть большой смысл, спасибо!