Android Compose MVVM - 如何在不带参数的可组合函数中引用 viewModel 对象?
Android Compose MVVM - How to reference a viewModel object in a Composable function that doesn't take arguments?
@Composable ContentFeed()
函数如何访问在 Activity 中创建的 viewModel
?依赖注入?或者这是一种错误的做事方式? viewModel
应该总是只有一个实例。
// MainActivity.kt
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val viewModel by viewModels<MainViewModel>()
setContent {
PracticeTheme {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.background) {
PulseApp(viewModel)
}
}
}
}
// TabItem.kt
typealias ComposableFun = @Composable () -> Unit
sealed class TabItem(var icon: Int, var title: String, var content: ComposableFun) {
object Feed : TabItem(R.drawable.ic_baseline_view_list_24, "Feed", { ContentFeed() })
}
// Content.kt
@Composable
fun ContentFeed() {
// I need viewModel created in MainActivity.kt here
}
在任何可组合项中,您都可以使用 viewModel<YourClassHere>()
:
Returns an existing ViewModel
or creates a new one in the given owner (usually, a fragment or an activity), defaulting to the owner provided by LocalViewModelStoreOwner
.
目前 Compose 中唯一的例外情况是,当它未绑定到 activity/fragment 时,是在您使用 Compose Navigation 时。在这种情况下,店主绑定到每条路线,请参阅 and 关于如何在路线之间共享店主的答案。
在 documentation 中查看有关视图模型 Compose 的更多信息。
@Composable ContentFeed()
函数如何访问在 Activity 中创建的 viewModel
?依赖注入?或者这是一种错误的做事方式? viewModel
应该总是只有一个实例。
// MainActivity.kt
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val viewModel by viewModels<MainViewModel>()
setContent {
PracticeTheme {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.background) {
PulseApp(viewModel)
}
}
}
}
// TabItem.kt
typealias ComposableFun = @Composable () -> Unit
sealed class TabItem(var icon: Int, var title: String, var content: ComposableFun) {
object Feed : TabItem(R.drawable.ic_baseline_view_list_24, "Feed", { ContentFeed() })
}
// Content.kt
@Composable
fun ContentFeed() {
// I need viewModel created in MainActivity.kt here
}
在任何可组合项中,您都可以使用 viewModel<YourClassHere>()
:
Returns an existing
ViewModel
or creates a new one in the given owner (usually, a fragment or an activity), defaulting to the owner provided byLocalViewModelStoreOwner
.
目前 Compose 中唯一的例外情况是,当它未绑定到 activity/fragment 时,是在您使用 Compose Navigation 时。在这种情况下,店主绑定到每条路线,请参阅
在 documentation 中查看有关视图模型 Compose 的更多信息。