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 保留
我是 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 保留