【问题标题】:How to get ViewModel in Activity in Android SunFlower Project?如何在 Android SunFlower 项目的 Activity 中获取 ViewModel?
【发布时间】:2019-08-01 09:54:11
【问题描述】:

我正在研究 Google Android SunFlower 项目的 MVVM

对于Fragment,它得到viewmodel,如下所示

private val plantDetailViewModel: PlantDetailViewModel by viewModels {
        InjectorUtils.providePlantDetailViewModelFactory(requireActivity(), args.plantId)
    }

我想尝试相同的方法在 Activity 中获取viewmodel。但是requireActivity()show 未解决的参考...

当我将 data binding 替换为 this 时,它不起作用。

是否有其他模式可以用于providePlantDetailViewModelFactory()

提前致谢。

【问题讨论】:

    标签: android android-activity kotlin mvvm viewmodel


    【解决方案1】:

    你必须将这些添加到你的 build.gradle

    implementation "androidx.core:core-ktx:1.3.1"
    implementation "androidx.fragment:fragment-ktx:1.2.5"
    

    在活动中的使用

    val usersViewModel: UsersViewModel by viewModels()
    

    片段中的使用

    // Get a reference to the ViewModel scoped to this Fragment
    val viewModel by viewModels<MyViewModel>()
    
    // Get a reference to the ViewModel scoped to its Activity
    val viewModel by activityViewModels<MyViewModel>()
    

    【讨论】:

    • 无法导入 activityViewModels
    【解决方案2】:

    你需要一个对"androidx.activity:activity-ktx:$version"的gradle依赖。

    然后你可以在你的活动中import androidx.activity.viewModels

    【讨论】:

      【解决方案3】:

      我不认为你可以为你的 Activity 做类似的事情 Fragment

      为什么?

      委托函数 viewModels 可从 fragment-ktx 库中获得(请参阅 here for reference 作为获取 ViewModel 的扩展使用 by 关键字在您的值对象上延迟实例化。

      例如,Activity 没有这样的东西。

      因此,最好自己创建或找到其他方法,例如 Kotlin 标准库中的基本 lazy{} 函数并为其提供逻辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        • 1970-01-01
        • 2014-08-09
        • 2017-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多