我已经按照本教程了解了有关
ViewModel
和 Jetpack Compose
的基本知识:
https://developer.android.com/codelabs/basic-android-kotlin-compose-viewmodel-and-state#0
在上面的教程中,第 6 节中显示了下一个
Composable
函数,它似乎在本地初始化 ViewModel
:
@Composable
fun GameScreen(
gameViewModel: GameViewModel = viewModel()
) {
// ...
}
上述方法对于教程示例来说是可以的,因为所有应用程序逻辑都位于
ViewModel
中。问题是,我的应用程序还需要从我的 ViewModel
访问 MainActivity
(调用一些方法),因为我的应用程序需要从 MainActivity
范围在后台创建和绑定自定义进程,并且 ViewModel
需要根据服务状态(启动、停止、事件...)进行更新,以便更新 UI。
从
MainActivity
创建并绑定服务是否正确?在 ViewModel
和 MainActivity
函数之间共享 Composable
是否正确?哪种方法是正确的?在ViewModel
中初始化MainActivity
然后传递给所有Composable
函数?
谢谢!
共享视图模型是很常见的,以及管理共享状态的正确方法
class MainActivity : AppCompatActivity() {
private val gameViewModel: GameViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyApp(gameViewModel)
}
}
}