【问题标题】:MVVM from where I should subscribe with Rx?MVVM 我应该从哪里订阅 Rx?
【发布时间】:2023-03-27 00:58:01
【问题描述】:

我来自MVP 模式,现在我正在使用MVVM 模式和RXJava 来执行一些功能,例如在地图中显示我当前的位置。为此,我在我的 MV 中订阅了Disposable,我将获得Location: (t 是我的位置)

val subscription = locationProvider.lastKnownLocation
    .subscribe(Consumer { t -> updateLocationMap(t) })

我的问题是我应该在我的View 中订阅这个Disposable 吗?因为我看到ViewModel 不能在View 中实例化并且知道我不知道如何使用这个Location 对象。

【问题讨论】:

  • 使用 Livedata 监听 ViewModel 的变化。并在您的视图中注册您的 ViewModel。
  • 然后在 LiveData 中转换之前我应该​​从哪里订阅我的 Disposable?
  • 在您的 ViewModel 中订阅它。然后将结果设置为 LiveData 的值
  • 在我的情况下,当我订阅 Disposable 时,您如何看到它会返回位置(在这种情况下为 t )。你的意思是我必须创建一个 LiveData 然后在我的订阅中创建一个 LiveData = t ?
  • 执行以下操作:val locLiveData = MutableLiveData<Location>() 在您的 ViewModel 中,然后在您的 subscrible() 函数中将该位置设置为 livedata 值 locLiveData.value = location。在视图中注册视图模型后,调用位置 livedata 并开始观察它。

标签: android mvvm rx-java system.reactive android-livedata


【解决方案1】:

这是一个例子

在 Viewmodel 中创建变量

    val LocationLiveData = MutableLiveData<Location>()

下面的代码应该在视图模型中

 disposable = locationProvider.lastKnownLocation
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe{location -> 
                LocationLiveData.postValue(location)
            }

之后在 View(Activity) 中

 viewmodel.LocationLiveData.observe(this, { t: Location? -> 
   //use this updated location
  }) 

【讨论】:

  • 但我应该调用该函数并返回我在变量上声明 postValue 的 LocationLiveData 吗?
  • 在活动的 onCreate 方法中观察 LocationLive 数据,它为您提供最后更新的位置。为 LocationLiveData 创建一个 getter。
猜你喜欢
  • 1970-01-01
  • 2020-07-02
  • 2013-04-01
  • 2017-09-17
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
相关资源
最近更新 更多