我试图实现分页,但每次旋转视图模型的屏幕构造函数都会被调用,从而触发 loadInitial 从我的 DataSource 类中的网络获取新数据。感谢帮助
// ViewModel
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
在我的 oncreate 活动中:
TopRatedResultViewModel viewModel = ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication()).create(TopRatedResultViewModel.class);
查看型号:
public class TopRatedResultViewModel extends AndroidViewModel {
private Top_Rated_Results_Repository repository;
public TopRatedResultViewModel(@NonNull Application application) {
super(application);
Log.d("moviedatabaselog", "TopRatedResultViewModel ");
repository = new Top_Rated_Results_Repository(application);
}
public LiveData<PagedList<Top_Rated_Result>> getTopRatedResultsPagedList() {
return repository.getTopRatedResultsPagedList();
}
我正在关注这个教程Android 分页与改造 https://www.simplifiedcoding.net/android-paging-library-tutorial/但这里使用了已弃用的 ViewModelProviders.of ,当我在屏幕旋转构造函数后测试它时,不会被调用。
你永远不应该打电话给工厂create()
方法你自己 - 这将忽略任何先前创建的 ViewModel 并始终创建一个新实例,而不是仅创建一个实例并在每次检索该实例时重用它。
相反,你应该遵循文档 https://developer.android.com/topic/libraries/architecture/viewmodel#implement并使用视图模型提供者 https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider:
// By passing in your Activity/Fragment as the ViewModelStoreOwner
// ViewModelProvider is able to retrieve already existing ViewModels
// Rather than create a new one each time
ViewModelProvider viewModelProvider = new ViewModelProvider(this);
// Then you call get() on your ViewModelProvider to get the instance,
// only creating one if one doesn't already exist
TopRatedResultViewModel viewModel = viewModelProvider.get(TopRatedResultViewModel.class);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)