【发布时间】:2021-01-12 01:01:42
【问题描述】:
我试图从另一个 ViewModel 中的其他 ViewModel 中获取一些数据以使我的代码更小,但我在尝试实现已经在片段或活动中工作的内容时遇到了问题,这就是我得到的:
class ObraConMediaViewModel(private val context: ViewModelStoreOwner,
private val id: Int): ViewModel(), LifecycleObserver {
var allObras: LiveData<ArrayList<ObraConMedia>>
private lateinit var viewModelobras: ViewModelObras
private lateinit var viewModelMediaObra: ViewModelMediaObra
val repositoryobras =ObrasRepository()
val repositoryMediaObra = MediaObraRepository()
val viewModelFactoryobras = ViewModelFactoryObras(repositoryobras)
val viewModelMediaObraFactory = ViewModelMedIaObraFactory(repositoryMediaObra)
init{
viewModelobras = ViewModelProvider(context, viewModelFactoryobras)
.get(ViewModelObras::class.java) // requireActivity() when called
viewModelMediaObra = ViewModelProvider(context, viewModelMediaObraFactory)
.get(ViewModelMediaObra::class.java)
viewModelobras.getObras(id)
viewModelobras.myResponse.observe(this , Observer { response ->
if (response.isSuccessful){
Log.d("Response", response.body()?.ans?.get(0)?.autor)
Log.d("Response", response.body()?.ans?.get(1)?.autor)
}else{
Log.d("Response", response.errorBody().toString())
}})
viewModelMediaObra.getMediaObra(Constantes.PRUEBA_ID)
viewModelMediaObra.myResponse.observe(this, Observer { response ->
if (response.isSuccessful){
Log.d("Response", response.body()?.ans?.get(0)?.filePath)
}
})
}}
我在使用 Observer 时遇到了问题,但是 扩展 类到 LifecycleObserver 修复了它,我不知道这是否会起作用,但我唯一正确的错误现在它是 .observe(this,....) 的所有者,我似乎没有找到将生命周期所有者从 fragment 传递到此视图模型的方法。我需要使这个视图模型工作的所有变量都在这两个响应中。如果这是一个非常糟糕的方法,请告诉我。感谢阅读。
【问题讨论】:
-
我不认为将 ViewModel 放在另一个视图模型中是个好主意
标签: kotlin retrofit2 viewmodel