JetPack сочиняйте захват состояния в долгоживущем лямбдеAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 JetPack сочиняйте захват состояния в долгоживущем лямбде

Сообщение Anonymous »

В тесте Composable Action является переменной типа mutablestateof, инициализированной с помощью :: a . Затем, в запуске, действие изменяется на :: b .
Однако, потому что запуск inteckect (unit) по умолчанию связан с клавиш модуля в составлении это означает, что он запускает, когда композитный впервые выполняется, и во время этого процесса он отражает ссылку на выполнение указанного действия . В результате изменения в действии не сразу отражаются в executeInlonglambda Поскольку действие было захвачено составлением во время начальной подвески.
После задержки В запуск запуск завершается, хотя действие было обновлено по отношению к :: B , executeInlonglambda по -прежнему выполняет первоначально захваченное действие (т.е. :: A ) из первого рендера, SO :: A выполняется в конце. Я знаю, что это должно быть решено с использованием ummorsupdatedState () , я сомневаюсь, что я создал лямбду, которая захватывает состояние (то есть счетчика ) и передавать лямбда как action2 для выполнения executeInlongLivelambda Полем Когда счетчик меняется, лямбда, которая захватывает счетчик, должна воссоздана. Почему он ведет себя иначе, чем Action1 ? Разве печатный счетчик не должен быть 0? Может ли кто-нибудь подробно объяснить, что происходит?fun a() {
Log.e("MainActivity", "a")
}

fun b() {
Log.e("MainActivity", "b")
}

@Composable
fun Test() {
var action by remember { mutableStateOf(::a) }
var counter by remember { mutableIntStateOf(0) }

LaunchedEffect(Unit) {
delay(1000)
action = ::b
counter++
}

ExecuteInLongLiveLambda(
action1 = action,
action2 = {
// read State
Log.e("MainActivity", "counter = $counter")
}
)
}

@Composable
fun ExecuteInLongLiveLambda(
action1: () -> Unit,
action2: () -> Unit,
) {
LaunchedEffect(Unit) {
delay(2000)
action1() // a
action2() // counter = 1
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... ved-lambda
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Android JetPack сочиняйте функцию вида вызова только один раз.
    Anonymous » » в форуме Android
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • JetPack сочиняйте ленивые удары колонны, чтобы удалить анимацию, не заканчивается гладко
    Anonymous » » в форуме Android
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • JetPack сочиняйте вложенные графики, нажимая и кнопку Topappbar Up поведение
    Anonymous » » в форуме Android
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • AWS Cognito маскирует данные в лямбде
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Сценарий Boto3 Cognito-IDP зависает/зависает в лямбде
    Anonymous » » в форуме Python
    0 Ответы
    57 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»