gpt4 book ai didi

android - 为什么 ViewModelProvider 在屏幕旋转时创建新的 View 模型实例?

转载 作者:行者123 更新时间:2023-12-01 21:33:58 24 4
gpt4 key购买 nike

我试图实现分页,但每次我旋转时都会调用 View 模型的屏幕构造函数,从而触发 loadInitial 从我的数据源类中的网络获取新数据。感谢帮助

// ViewModel
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"

在我的 oncreate Activity 中:

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 paging with retrofit但这里使用了已弃用的 ViewModelProviders.of,当我在屏幕旋转构造函数后测试它时,不会调用它。

最佳答案

你永远不应该自己调用工厂的 create() 方法 - 这将忽略任何以前创建的 ViewModel 并始终创建一个新实例,而不是每次你只创建一个实例并重复使用它检索实例。

相反,您应该关注 the documentation并使用 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);

关于android - 为什么 ViewModelProvider 在屏幕旋转时创建新的 View 模型实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62227321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com