Cil*_*lla 1 android mvvm kotlin rx-java
我正在使用MVVM带有模式的应用程序RxJava。架构如下:

这是我第一次使用此模式,并且我不确定在由应用程序的另一个组件进行的数据更改中更新ViewModel(因此相应的View)的最佳方法。
例如:假设我们有一个Activity显示我关注的用户列表(如社交应用程序),则从该列表中选择一个用户,然后在另一个用户中打开其个人资料Activity。现在,从第二秒开始,Activity我决定取消关注该用户,当我按下后退按钮返回到第一秒时,我Activity希望列表自动更新(删除相应的用户,显然无需重新下载所有数据)。
问题在于两者Activity有两个不同ViewModel。我如何使第二个所做的更改Activity影响ViewModel第一个所做的更改?Repository通知第一个Activity更改是否是的责任?
startActivityForResultViewModel第一Activity在第二个非常感谢!
我决定取消关注该用户,当我按下“后退”按钮返回第一个活动时,我希望列表自动更新(删除相应的用户,显然无需重新下载所有数据)。
问题是两个Activity有两个不同的ViewModel。
我以为您有一个存储库,其中包含可以公开的“模型”(本地数据源)LiveData<*>,不是吗?
在这种情况下,您需要做的是:
@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);
}
Run Code Online (Sandbox Code Playgroud)
现在,您的存储库可以从DAO返回LiveData:
public class MyRepository {
public LiveData<List<Item>> getItems() {
// either handle "fetch if needed" here, or with NetworkBoundResource
return itemDao.getItemsWithChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
您在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;
}
}
Run Code Online (Sandbox Code Playgroud)
而且,如果您观察到此情况,则在修改“房间”中的项目时,它将自动更新其中的LiveData onStart(当您再次开始观察时)。