我正在尝试了解 ViewModel 以及如何观察其中的变量。我想弄清楚如何观察 ViewModel 中的变量并在它们发生变化时触发操作。请考虑以下示例代码:
我的可组合项:
@Composable
fun ScreenSetup(viewModel: myViewModel) {
var whosTurn: Int? by remember { mutableStateOf(viewModel.whosTurn.value) }
Column {
Row {
Text(text = "Current Turn = ${whosTurn}")
}
Row {
Button(onClick = {
viewModel.newTurn()
}) {
Text(text = "Next Turn")
}
}
}
}
我的视图模型:
class myViewModel : ViewModel() {
var whosTurn : MutableState<Int> = mutableIntStateOf(1)
fun newTurn() {
Log.i("tag",whosTurn.value.toString())
whosTurn.value += 1
if (whosTurn.value == 4) {
whosTurn.value=1
//sets limit of 3 player game
}
}
}
当我执行简单程序时,如果单击按钮,仿真器上的输出会不断显示“Current Turn = 1”。但是,如果我查看我的日志,变量“whosTurn”会按照我的意愿在 ViewModel 中递增。如何正确观察变量“whosTurn”以使当前回合递增?
提前非常感谢您考虑我的问题。
请尝试使用以下代码
val whosTurn: Int? by viewModel.whosTurn.observeAsState()