【问题标题】:Android Jetpack Compose get Activity View Model from Fragment inside ComposableAndroid Jetpack Compose 从 Composable 内部的 Fragment 获取 Activity View Model
【发布时间】:2021-07-20 00:15:06
【问题描述】:

我在从可组合的片段中获取活动视图模型时遇到问题

private val birthdayViewModel: BirthdayViewModel by activityViewModels()

当我使用 viewModels() 时没有问题

private val birthdayViewModel: BirthdayViewModel by viewModels()

以可组合方式获取视图模型

val birthdayViewModel: BirthdayViewModel = viewModel()
val formItem by birthdayViewModel.birthdayFormItem.observeAsState()

问题是使用activityViewModels时表单项错误为null,但使用viewModels时却没有

当我在调试模式下运行以检查 formItem 的值时,我收到以下错误消息: "找不到 com.form.FormSpec$FormItem 类型的局部变量 'formItem'"

这可能是 gradle 版本控制问题吗?

请帮忙:)

【问题讨论】:

  • 您在项目中使用Dagger Hilt 吗?有一种方法可以使用 Dagger HiltViewModel 提供可组合的ViewModel
  • 目前没有使用 Hilt 但我会试一试
  • 你有在片段内使用activityViewModels的依赖吗?你能在没有任何compile time 警告/错误的情况下使用activityViewModels 吗?
  • 是的,没有问题,我可以运行代码并将我在使用activityViewModels 时收到的错误放在我的问题中

标签: android kotlin android-jetpack-compose android-viewmodel


【解决方案1】:
private val activityViewModel: ActivityViewModel by activityViewModels()
private val fragmentViewModel: FragmentViewModel by viewModels()

Composable(fragmentViewModel, activityViewModel)

问题与范围有关。我没有将视图模型直接传递到我的可组合对象中,而是在可组合构造函数中执行此操作,这不会导致我的两个视图模型都具有片段范围。

Composable(
   fragmentViewModel: FragmentViewModel = viewModel(), 
   activityViewModel: ActivityViewModel = viewModel()
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 2023-01-05
    • 2019-01-22
    • 1970-01-01
    • 2023-03-28
    • 2019-05-09
    • 2017-02-13
    相关资源
    最近更新 更多