soy nuevo en Android, estoy trabajando en una aplicación que recupera datos del servidor usando retrofit y kodein y MvvM en kotlin configuré un cajón de navegación en mi aplicación y el propósito es que cuando hago clic en el elemento del cajón de navegación se abre una nueva actividad y en esta actividad quiero mostrar recyclerview pero cuando se abre una nueva actividad, recyclerview no puede configurar listitem en el reciclador, depuro mi código en mis repositorios y clase de modelo de vista y veo que recibieron datos, depuro mi código en una nueva actividad y veo que viewmodel no puede recibir esos datos y establecer un icono no válido junto a mi código en viewmodel.observe
esta es mi clase de repositorio:
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 }esto es para ViewModel
var repoDigitalProduct: LiveData<List<DigitalProduct>> = repositorys.getdigitalproduct() fun getdigitalproduct(): LiveData<List<DigitalProduct>>{ return repoDigitalProduct }esto es para nueva actividad:
private fun getDigitalProduct() { viewModel.getdigitalproduct().observe(this, Observer { digipro.addAll(it) })esto es digipro:
var digipro: ArrayList<DigitalProduct> = ArrayList()y esto uso este código en el método oncreate en nueva actividad:
viewModel = ViewModelProviders.of(this, factory).get(AllViewModel::class.java) getDigitalProduct() setdigitalProductRecycler()también uso el código viewmodelprovider.of en Mainactivity
esto es para setdigitalProductRecycler:
private fun setdigitalProductRecycler() { val digiproRecycler = digital_product_recycler digiproRecycler.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true) digiproRecycler.adapter = DigitalProductAdapter(digipro) }mis códigos funcionan en la actividad principal, pero cuando lo pruebo en una nueva actividad .........
¿Qué tengo que hacer?
La mejor manera de resolver este problema es crear su modelo de vista en actividad o puede usar un modelo de vista compartido. Entonces su modelo de vista se mantendrá mientras su actividad retenga
Puse el repositorio y el modelo de vista en el objeto complementario y luego llamé al modelo de vista de MainActivity en esa actividad.
esto es para MainActivty:
companion object{ val repositorys = AllRepositorys() var viewModel: AllViewModel = AllViewModel(repositorys) }esto es para newActivity:
lateinit var viewModel: AllViewModely puse esto en el método oncreate () en la nueva actividad:
viewModel = MainActivity.viewModelACTUALIZAR
Ahora manejo este problema creando un modelo de vista para cada fragmento o actividad. Porque ViewModel está diseñado para almacenar y administrar datos relacionados con la interfaz de usuario en un ciclo de vida de Actividad o Fragmento