文本仅显示一行更新的实时数据。如何确保文本不被覆盖,但添加了实时数据行?
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")}
您甚至不应该首先使用 LiveData。对于 Kotlin 和 Compose,最好使用 Flows。
也就是说,所有这些都应该转移到视图模型中。然后它可能看起来像这样:
class MyViewModel : ViewModel() {
private val _gameUiState = MutableStateFlow(GameUiState(""))
val gameUiState: StateFlow<GameUiState> = _gameUiState.asStateFlow()
fun ontextfieldvalChange(text: String) {
_gameUiState.update {
it.copy(textfieldval = it.textfieldval + "\n" + text)
}
}
}
在您的撰写代码中,您可以使用以下命令检索 gameUiState:
val gameUiState by viewModel.gameUiState.collectAsStateWithLifecycle()
为此,您需要 gradle 依赖项
androidx.lifecycle:lifecycle-runtime-compose
。text
变量。
现在
apiWithoutCompose
可以调用视图模型的ontextfieldvalChange
:
apiWithoutCompose {
viewModel.ontextfieldvalChange(link.absUrl("href"))
}
有点不清楚
apiWithoutCompose
是什么以及它是从哪里调用的,但看起来它甚至不应该位于视图模型之外。它甚至可能应该位于某个更深的层,例如存储库中。