Estoy trabajando en una aplicación que usa el patrón MVVM con RxJava . La arquitectura es la siguiente: 
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?
startActivityForResultViewModel de la primera Activity en la segunda¡Muchas gracias!
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).