Не удалось запустить ComposeAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Не удалось запустить Compose

Сообщение Anonymous »

Я новичок, и мой код может быть немного неуклюжим;
Я хочу понять, почему ссылка на объект состояния изменилась в updateCfg, но она по-прежнему не запускает рекомпозицию .
Этот объект состояния является нестабильным типом, поэтому он должен инициировать рекомпозицию при изменении ссылки, верно? Перед назначением в updateCfg _jsonCfg.value и cfg имеют равные значения, а элемент настроек ссылается на один и тот же список. Перед заданием я распечатал их хеш-коды, а они разные.

Код: Выделить всё

data class MyConfig(
var name: String,
var settings: mutableList

)

@Composable
fun Parents() {
val cfg:MyConfig by viewModelLocal.jsonCfg.observeAsState()

ChildComposableFunc(cfg) { newcfg ->
viewModelLocal.updateCfg(newcfg)
}
}

@Composable
fun ProgramEditor(
cfg: MyConfig,
modifyEnable: Boolean,
navController: NavHostController,
onCfgChange: (MyConfig) -> Unit
) {
...
cfg.settings.removeAt(0)
onCfgChange(cfg.copy())
}

class ViewModelLocal(inCfg: MyConfig) : ViewModel() {
val jsonCfg: LiveData
get() = _jsonCfg

private val _jsonCfg = MutableLiveData()

val tmpScene: LiveData
get() = _tmpScene

private val _tmpScene = MutableLiveData()

init {
Log.d("ViewModelLocal", "Create A ViewModelLocal")
_jsonCfg.value = inCfg
_jsonCfg.observeForever { newValue ->
Log.d("ViewModelLocal", "LiveData changed: $newValue")
}
_tmpScene.value = getNewDefaultScene()
}

fun updateCfg(cfg: MyConfig) {
Log.d("ViewModelLocal", "updateCfg: ${_jsonCfg.value}")
Log.d("ViewModelLocal", "updateCfg: $cfg")

Log.d("CPKCPK1", "" + System.identityHashCode(_jsonCfg.value))
Log.d("CPKCPK2", "" + System.identityHashCode(cfg))
_jsonCfg.value = cfg
}

}
Я хочу понять, какие условия запускают перекомпоновку?


Подробнее здесь: https://stackoverflow.com/questions/790 ... er-compose
Ответить

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

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

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

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

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