android mvvm,具有多个活动的应用程序

nzkunb0c  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(371)

我是android新手,我正在开发一个应用程序,该应用程序使用改装和kodein以及kotlin中的mvvm从服务器检索数据我在我的应用程序中设置了一个导航抽屉,目的是当我单击导航抽屉的项目时,新活动打开,在这个活动中,我想显示recyclerview,但当新活动打开recyclerview时,我无法在recycler上设置listitem我的代码在我的存储库和viewmodel类中,我看到他们收到了数据,我在new activty中调试代码,我看到viewmodel无法接收这些数据,并在viewmodel.observe中的代码旁边设置了一个无效图标
这是我的存储库类:

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
 }

这是针对新活动:

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

我是digipro:

var digipro: ArrayList<DigitalProduct> = ArrayList()

我在new 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)
}

我的代码在主活动中工作,但当我在新活动中尝试它时。。。。。。。。。
我该怎么办?

nx7onnlm

nx7onnlm1#

我自己修复了它,我把repositorie和viewmodel放在companion对象中,而不是在newactivity中创建新的viewmodel,我称之为mainactivity的viewmodel
此主活动id:

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

}
这是新活动:

lateinit var viewModel: AllViewModel

我把这个放在新活动的oncreate()方法中:

viewModel = MainActivity.viewModel

地狱尽头xd

tyg4sfes

tyg4sfes2#

解决此问题的最佳方法是在“活动”中创建viewmodel,也可以使用共享viewmodel。因此viewmodel将保留为活动保留
https://stackoverflow.com/a/52611554/8868638

相关问题