如何让Jetpack Compose的Text组件保留LiveData历史数据不被覆盖
问题:Text组件仅显示LiveData更新的单行数据,如何确保文本不被覆盖而是追加LiveData数据?
原代码
var myLive = MutableLiveData<String>() setContent { val text: String? by myLive.observeAsState() text?.let { viewModel.ontextfieldvalChange(it) } SelectionContainer { Text( gameUiState.textfieldval, modifier = Modifier .background(Color.Black) .height(150.dp) .verticalScroll(scroll) .border(BorderStroke(1.dp, Color.Gray)), color = Color.Green, ) } } apiWithoutCompose { myLive.postValue(link.absUrl("href")) }
解决方法
核心是修改数据更新逻辑,不直接替换原有文本,而是将新数据追加到已有内容后并换行分隔。修改ontextfieldvalChange方法如下:
fun ontextfieldvalChange(text: String) { _gameUiState.update { it.copy(textfieldval = it.textfieldval + "\n" + text) } }
每次LiveData推送新数据时,新内容都会被追加到已有文本的下一行,避免覆盖原有内容。
内容的提问来源于stack exchange,提问作者Anatolii
相关产品推荐
相关产品推荐

