Android 架构组件刷新实时数据
我正在努力寻找使用体系结构组件刷新主细节视图上数据的正确方法。我有一个top master活动,显示最喜爱的电影列表。当我转到“详细信息”视图时,从“收藏夹”中添加/删除电影并关闭“详细信息”视图,主视图的数据保持不同步。我在onCreate方法中初始化视图模型:Android 架构组件刷新实时数据,android,android-livedata,android-viewmodel,android-architecture-components,Android,Android Livedata,Android Viewmodel,Android Architecture Components,我正在努力寻找使用体系结构组件刷新主细节视图上数据的正确方法。我有一个top master活动,显示最喜爱的电影列表。当我转到“详细信息”视图时,从“收藏夹”中添加/删除电影并关闭“详细信息”视图,主视图的数据保持不同步。我在onCreate方法中初始化视图模型: @Override public void onCreate(@Nullable Bundle savedInstanceState) { moviesViewModel = ViewModelProviders
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
moviesViewModel = ViewModelProviders
.of(this, viewModelFactory)
.get(MoviesViewModel.class);
moviesViewModel.getMovies(FAVOURITES).observe(this, this::show);
}
视图模型也非常简单:
@NonNull
LiveData<Resource<List<Movie>>> getMovies(Criterion criterion) {
movieRepository.fetchBy(criterion)
.doOnSubscribe(it -> moviesLiveData.setValue(Resource.loading()))
.subscribe(
movies -> moviesLiveData.setValue(Resource.success(movies)),
throwable -> moviesLiveData.setValue(Resource.error(throwable))
);
但我不太喜欢这种方法,因为当屏幕方向改变时,以及当活动来自后台时,它会导致刷新
也可以只在结果发生更改时才启动结果的详细信息活动并刷新数据,但我也不认为在被动方法中应该这样做
此外,我曾考虑在Coent解析器中订阅数据库更改,并在每次数据更改时使用新内容更新Flowable,但我确信它是否会工作,因为当发生更改时,live data observer(主视图)处于暂停模式,因此不会通知它,我说的对吗?您也可以将livedata用于数据库,以便从db->vm->ui更新更改有几种方法可以管理刷新主视图
ViewModelProviders.of(parentFragment!!,viewModelFactory)
。然后母版页和详细页都可以查看您的moviesLiveData
**请注意,最新版本的导航允许您通过将ViewModel
绑定到特定的导航图来更精细地定义范围startActivityForResult
,setResult
将电影结果信息传递回母版页,并在onActivityResult
LiveData
LiveData
的要点,它存储最新的更新,并在有人发现它时再次交付查查。如果您使用此方法并旋转设备,则不会发生触发。如果您将应用程序置于后台并将应用程序置于前台N次,您的方法将创建N个注册。
@Override
public void onResume() {
super.onResume();
moviesViewModel.getMovies(FAVOURITES).observe(this, this::show);
}