Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

666
Vistas
Android MVVM: actualice ViewModel cuando cambien los datos

Estoy trabajando en una aplicación que usa el patrón MVVM con RxJava . La arquitectura es la siguiente: ingrese la descripción de la imagen aquí

Es la primera vez que uso este patrón y no estoy seguro de cuál es la mejor manera de actualizar un ViewModel (y, en consecuencia, la View correspondiente) cuando ocurre un cambio en los datos, realizado por otro componente de la aplicación.

Por ejemplo: supongamos que tenemos una Activity que muestra la lista de usuarios que sigo (como una aplicación social), de esta lista selecciono un usuario y abro su perfil en otra Activity . Ahora, a partir de esta segunda Activity decido dejar de seguir al usuario y cuando presiono el botón Atrás para volver a la primera Activity me gustaría que la lista se actualice automáticamente (borrando el usuario correspondiente, obviamente sin tener que volver a descargar todos los datos ).

El problema es que las dos Activity tienen dos ViewModel diferentes. ¿Cómo puedo hacer que los cambios realizados por la segunda Activity afecten el ViewModel de la primera? ¿Es responsabilidad del Repository informar a la primera Activity de los cambios?

  • Prefiero no usar startActivityForResult
  • Prefiero no inyectar el ViewModel de la primera Activity en la segunda

¡Muchas gracias!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Decido dejar de seguir al usuario y cuando presiono el botón Atrás para volver a la primera Actividad me gustaría que la lista se actualice automáticamente (borrando el usuario correspondiente, obviamente sin tener que volver a descargar todos los datos).

El problema es que las dos actividades tienen dos ViewModel diferentes.

Pensé que tiene un Repositorio que envuelve un "Modelo" (fuente de datos local) que puede exponer LiveData<*> , ¿no?

En cuyo caso todo lo que necesitas hacer es esto:

 @Dao public interface ItemDao { @Query("SELECT * FROM ITEMS") LiveData<List<Item>> getItemsWithChanges(); @Query("SELECT * FROM ITEMS WHERE ID = :id") LiveData<List<Item>> getItemWithChanges(String id); }

Ahora su repositorio puede devolver LiveData desde el DAO:

 public class MyRepository { public LiveData<List<Item>> getItems() { // either handle "fetch if needed" here, or with NetworkBoundResource return itemDao.getItemsWithChanges(); } }

Que obtienes en tu ViewModel:

 public class MyViewModel extends ViewModel { private final LiveData<List<Item>> items; public MyViewModel(MyRepository repository) { this.items = repository.getItems(); } public LiveData<List<Item>> getItems() { return items; } }

Y si observa esto, cuando modifique el elemento en Room, automáticamente actualizará este LiveData en onStart (cuando comience a observar nuevamente).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda