Android Mvvm, app有多个activity

Android Mvvm, app with more than one activity

我是 android 的新人,我正在开发一个应用程序,该应用程序使用 kotlin 中的改造和 kodein 和 MvvM 从服务器检索数据 我在我的应用程序中设置了一个导航抽屉,目的是当我点击导航抽屉的项目时 新 activity 打开,在此 activity 我想显示 recyclerview 但是当新活动打开 recyclerview 时无法在回收站上设置 listitem 我在我的存储库和视图模型 class 中调试我的代码,我看到他们收到了数据 我在新活动中调试我的代码,我看到 viewmodel 无法接收这些数据并在我的代码旁边设置了一个无效图标 viewmodel.observe

这是我的存储库class:

 fun getdigitalproduct(): LiveData<List<DigitalProduct>>{
    val dpData:MutableLiveData<List<DigitalProduct>> = MutableLiveData<List<DigitalProduct>>()
    val apiClient = ApiClient()

    val call:Call<List<DigitalProduct>> = apiClient.getClient().create(ApiService::class.java).getdigitalproduct()
    call.enqueue(object : Callback<List<DigitalProduct>>{
        override fun onResponse(
            call: Call<List<DigitalProduct>>,
            response: Response<List<DigitalProduct>>
        ) {
            dpData.value = response.body()
        }

        override fun onFailure(call: Call<List<DigitalProduct>>, t: Throwable) {
             dpData.value = null
        }

    })
    return dpData
}

这是用于 ViewModel

var repoDigitalProduct: LiveData<List<DigitalProduct>> = repositorys.getdigitalproduct()
fun getdigitalproduct(): LiveData<List<DigitalProduct>>{
    return repoDigitalProduct
 }

这是新的 activity:

  private fun getDigitalProduct() {
    viewModel.getdigitalproduct().observe(this, Observer {
        digipro.addAll(it)
    })

这是数码相机:

var digipro: ArrayList<DigitalProduct> = ArrayList()

我在新 activity:

的 oncreate 方法中使用了这段代码
  viewModel = ViewModelProviders.of(this, factory).get(AllViewModel::class.java)
    getDigitalProduct()
    setdigitalProductRecycler()

我也在 Mainactivity 中使用 viewmodelprovider.of 代码

这是针对 setdigitalProductRecycler 的:

 private fun setdigitalProductRecycler() {
    val digiproRecycler = digital_product_recycler
    digiproRecycler.layoutManager =
        LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true)
    digiproRecycler.adapter = DigitalProductAdapter(digipro)
}

我的代码在 Mainactivity 中有效,但是当我在新的 activity 中尝试时......

我该怎么办?

我将 repositorie 和 viewmodel 放在伴随对象中,然后我在 activity

中调用 MainActivity 的 viewmodel

这是针对 MainActivty 的:

 companion object{
   val repositorys = AllRepositorys()
   var viewModel: AllViewModel = AllViewModel(repositorys)
}

这是新的Activity:

lateinit var viewModel: AllViewModel

我把它放在新的 oncreate() 方法中 activity:

 viewModel = MainActivity.viewModel

更新

现在我通过为每个片段或 activity 创建视图模型来处理这个问题。因为,ViewModel的设计目的是在Activity或Fragment

的生命周期中存储和管理UI相关的数据

解决此问题的最佳方法是在 activity 中创建您的视图模型,或者您可以使用共享视图模型。因此,您的视图模型将保留为您的 activity 保留