Android MVVM。传递具有Context作为依赖项的对象

大卫

我有一个viewmodel接受模型作为构造函数参数之一。MainModelcontext(我需要注册broadcastReceiver)。

class MainViewModel(private val test: MyTestReiverHandler) : ViewModel() {

}

class MyTestReiverHandler(context: Context) {
    init {
        val intentFilter = IntentFIlter()
        intentFiler.addAction("android.net.conn.CONNECTIVITY_CHANGE")
        context.registerReceiver(receiver, intentFiler)
    }

    fun doSomething() {
        // do something....
    }
}

我知道那viewmodel's应该没有任何参考context那么这种方法是正确的吗?还是应该所有需要的东西context像位置接收器,广播接收器,......应在办理view又名activity水平?然后作为结果传递给viewmodel

编辑

我还将添加另一个我有PermissionManager活动来询问某种权限的示例我想对所有经理都使用该管理器。viewmodels是否有某种类型的管理器activity作为参数viewmodels我知道这是不好过contextactivityviews直接到我viewmodel但是,如果我的计算机中有其他具有contextactivity(例如PermissionManager)的对象,是否很好?viewModel

class MainViewModel(private val permissionManager: PermissionManager) : ViewModel() {
    fun doSomethingWithLocation() {
        permissionManager.requestLocationPermission({
            // do something if permission granted
        })
    }

    fun doSomethingWithCamera() {
        permissionManager.requestCameraPermission({
            // do something if permission granted
        })
    }
}

class DetailViewModel(private val permissionManager: PermissionManager) : ViewModel() {
    fun doSomethingWithLocation() {
        permissionManager.requestLocationPermission({
            // do something if permission granted
        })
    }

    fun doSomethingWithCamera() {
        permissionManager.requestCameraPermission({
            // do something if permission granted
        })
    }
}

class PermissionManager(activity: Activity) {

    private val activityWeakRef = WeakReference(activity)

    fun requestLocationPermission(onPermissionGranted: ((Boolean) -> Unit)) {
        //
        // Location permission implemetntation
        //
    }

    fun requestStoragePermission(onPermissionGranted: ((Boolean) -> Unit)) {
        //
        // Storage permission implemetntation
        //
    }

    fun requestCameraPermission(onPermissionGranted: ((Boolean) -> Unit)) {
        //
        // Camera permission implemetntation
        //
    }
}
祖兹大师

您可以AndroidViewModel(application:Application)而不是ViewModel扩展MainViewModel现在您可以像使用befor一样使用MainViewModel,并且可以使用应用程序实例注册您的broadcastReceiver

class MainViewModel(application: Application) : AndroidViewModel(application) {

}

活性/片段

val viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)

这是正确和容易的。

应该在需要上下文的所有事物(例如位置接收器,广播接收器等)中以活动级别进行处理吗?

不是所有的人。我曾经在跟踪用户位置的应用程序上工作。由于该应用需要长时间跟踪用户位置,并且其他操作同时进行。我决定在另一个线程中执行此操作,并让ViewModel分别广播结果。存储库还需要上下文来构建Room数据库。ViewModel将需要上下文来实例化存储库。这就是为什么我们ViewModel上AndroidViewModel的原因如果您愿意,可以实现依赖注入以避免这种依赖。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

打包具有依赖项的Android AAR

来自分类Dev

Android Studio,带有传递依赖项的jar加载库

来自分类Dev

在Android中创建具有依赖项的库

来自分类Dev

在Android中创建具有依赖项的库

来自分类Dev

我的具有Android测试的Android应用中的依赖项冲突错误

来自分类Dev

Android Studio-在单个项目中具有共同依赖项的多个android应用

来自分类Dev

如何使用带有本机库的 android 库作为 Chromium 的依赖项?

来自分类Dev

带有依赖项的Android冲突appcompat

来自分类Dev

当具有依赖项并且也是aar库时,如何为android库生成javadoc?

来自分类Dev

如何发布具有另一个android库项目依赖项的AAR?

来自分类Dev

具有Android绘图依赖项1.0.0时,已经定义了属性“标题”

来自分类Dev

Android依赖项'android.arch.lifecycle:runtime'对于编译和运行时具有不同的版本

来自分类Dev

Android Studio:创建没有Android依赖项的Java项目

来自分类Dev

无法从Android项目的Gradle中删除传递依赖项

来自分类Dev

Libgdx,Android的传递依赖项,Java库项目,Jar

来自分类Dev

Android AAR依赖项

来自分类Dev

将具有“number.xx”等版本的 InMobi 依赖项添加到 Android 项目中会出现错误

来自分类Dev

MVVM中具有依赖项属性的用户控件

来自分类Dev

带有依赖项的Android Studio导出jar

来自分类Dev

带有Gradle和Android Studio的ViewPagerIndicator依赖项

来自分类Dev

带有Gradle和Android Studio的ViewPagerIndicator依赖项

来自分类Dev

Android Studio 3.4 无法解决所有依赖项

来自分类Dev

Android minSdk和依赖项

来自分类Dev

创建自己的Android依赖项

来自分类Dev

Twilio:Android依赖项问题

来自分类Dev

Android依赖项'android.arch.lifecycle:runtime'对于编译(1.0.0)和运行时(1.1.1)类路径具有不同的版本

来自分类Dev

Android将View作为片段对象传递

来自分类Dev

Android Mvvm,具有多个活动的应用程序

来自分类Dev

useEffect作为具有多个依赖项的componentDidUpdate

Related 相关文章

  1. 1

    打包具有依赖项的Android AAR

  2. 2

    Android Studio,带有传递依赖项的jar加载库

  3. 3

    在Android中创建具有依赖项的库

  4. 4

    在Android中创建具有依赖项的库

  5. 5

    我的具有Android测试的Android应用中的依赖项冲突错误

  6. 6

    Android Studio-在单个项目中具有共同依赖项的多个android应用

  7. 7

    如何使用带有本机库的 android 库作为 Chromium 的依赖项?

  8. 8

    带有依赖项的Android冲突appcompat

  9. 9

    当具有依赖项并且也是aar库时,如何为android库生成javadoc?

  10. 10

    如何发布具有另一个android库项目依赖项的AAR?

  11. 11

    具有Android绘图依赖项1.0.0时,已经定义了属性“标题”

  12. 12

    Android依赖项'android.arch.lifecycle:runtime'对于编译和运行时具有不同的版本

  13. 13

    Android Studio:创建没有Android依赖项的Java项目

  14. 14

    无法从Android项目的Gradle中删除传递依赖项

  15. 15

    Libgdx,Android的传递依赖项,Java库项目,Jar

  16. 16

    Android AAR依赖项

  17. 17

    将具有“number.xx”等版本的 InMobi 依赖项添加到 Android 项目中会出现错误

  18. 18

    MVVM中具有依赖项属性的用户控件

  19. 19

    带有依赖项的Android Studio导出jar

  20. 20

    带有Gradle和Android Studio的ViewPagerIndicator依赖项

  21. 21

    带有Gradle和Android Studio的ViewPagerIndicator依赖项

  22. 22

    Android Studio 3.4 无法解决所有依赖项

  23. 23

    Android minSdk和依赖项

  24. 24

    创建自己的Android依赖项

  25. 25

    Twilio:Android依赖项问题

  26. 26

    Android依赖项'android.arch.lifecycle:runtime'对于编译(1.0.0)和运行时(1.1.1)类路径具有不同的版本

  27. 27

    Android将View作为片段对象传递

  28. 28

    Android Mvvm,具有多个活动的应用程序

  29. 29

    useEffect作为具有多个依赖项的componentDidUpdate

热门标签

归档