Почему этот код выполняется дважды? Если рекомпозиция... что вызывает рекомпозицию?

Я изучаю Android Compose, и я искал/играл с этим кодом от developer.android в github. Проекты — это простое приложение для демонстрации адаптивного экрана. Спортивное приложение

Все работает нормально, но я немного запутался.

Я зарегистрировал элемент/строку в Logcat. И я вижу, что он выполняется дважды? Рекомпозиция? Чем это вызвано?

Также зарегистрируйте хэш-код selectedSport, чтобы увидеть, перекомпонован ли он для того же элемента.

Nikola Despotoski 17.01.2023 13:04
0
1
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем коде:

Log.i("info", "xxx")

Column(
    modifier = Modifier.padding(4.dp)
) {

    Box {
        Image(painter = painterResource(R.drawable.xx))
        Text()
    }

    Text(
        text = stringResource(R.string.app_name),
    )
}

stringResource и painterResource могут вызвать рекомпозицию. В compose, когда что-то вызывает рекомпозицию, это происходит в ближайшей области видимости.
Однако Box и Column являются встроенными функциями, и это означает, что у обоих нет собственных областей перекомпоновки.

В вашем коде, когда перекомпоновываются Image и Text, все компонуемые перекомпоновываются.

Другие вопросы по теме