观察 ViewModel 中变量的状态

问题描述 投票:0回答:1

我正在尝试了解 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”以使当前回合递增?

提前非常感谢您考虑我的问题。

android android-jetpack-compose state android-viewmodel
1个回答
0
投票

请尝试使用以下代码

val whosTurn: Int? by viewModel.whosTurn.observeAsState()
© www.soinside.com 2019 - 2024. All rights reserved.