假设你的项目中有两个屏幕:ScreenA 和 ScreenB,你希望在 ScreenA 中通过点击某个 UI 控件跳转到 ScreenB,并且在 ScreenB 中能够获取从 ScreenA 中传递过来的数据。 下面的示例演示如何实现这个功能。
首先是 ScreenA 的代码:
@Composable
fun ScreenA(navController: NavController, viewModel: MyViewModel) {
val text = remember { mutableStateOf("") }
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
TextField(
value = text.value,
onValueChange = { text.value = it },
label = { Text("Enter some text") },
modifier = Modifier.padding(horizontal = 16.dp)
)
Button(
onClick = {
val newData = text.value
viewModel.setData(newData) // 通知 ViewModel 更新数据
navController.navigate("screen_b") // 导航到 ScreenB
},
modifier = Modifier.padding(top = 16.dp)
) {
Text("Go to Screen B")
}
}
}
在这个示例中,我们使用了 Jetpack Navigation API 来实现导航。当用户点击“Go to Screen B”按钮时,我们调用了 navController.navigate("screen_b")
来导航到 ScreenB。
我们还调用了 viewModel.setData(newData)
,以通知 ViewModel 更新数据。ViewModel 的代码如下:
class MyViewModel : ViewModel() {
private val _data = MutableLiveData()
val data: LiveData = _data
fun setData(newData: String) {
_data.value = newData
}
}
在 ViewModel 中,我们定义了一个 _data
的私有成员变量,并将其封装在公共的 data
属性中。我们还定义了一个 setData(newData: String)
的方法,用于设置 _data
的值。在