什么是已弃用的 getSupportLoaderManager() 的适当替代品?

What is the appropriate replacement of deprecated getSupportLoaderManager()?

我了解到 getSupportLoaderManager 已被弃用。但我想打电话:

getSupportLoaderManager().initLoader(0, null, mRecipeLoaderManager);

应该用什么替代那个电话? 或者我仍然可以放心地使用 getSupportLoaderManager 吗?

如此处所述:Loaders

"Loaders have been deprecated as of Android P (API 28). The recommended option for dealing with loading data while handling the Activity and Fragment lifecycles is to use a combination of ViewModels and LiveData."

每当您看到 deprecated 时,直接转到 developer api reference site 并查看您正在寻找的 class 或函数,看看是否有等效的替代方案。

如果需要,您仍然可以使用 getSupportLoaderManagerandroid.support.v4.app.LoaderManager.getInstance(this).initLoader(0, null, this).forceLoad();

这里简单介绍一下如何用ViewModel替换Loader:

https://developer.android.com/jetpack/arch/viewmodel#loaders

那里的图形不言自明,我认为:

如需更详尽的解释,您可以阅读这篇博客post:

https://medium.com/google-developers/lifecycle-aware-data-loading-with-android-architecture-components-f95484159de4

这个方法被弃用的原因是因为加载器已经从他们历史上的 FragmentFragmentActivity 实现中分离出来,以便生活在他们自己的库中,这个库很快将成为一个可选的依赖项,并且它们的实现已在 架构组件 .

之上重写

检索 LoaderManager 实例的非捆绑方式是使用静态工厂方法:

LoaderManager.getInstance(T)

其中 TLifecycleOwnerViewModelStoreOwner 的实例(主要实现是 FragmentActivityFragment)。

我也遇到了这个问题,这段代码帮我解决了LoaderManager.getInstance(this).initLoader(0,null,mRecipeLoaderManager);

希望对你有帮助

我也遇到了同样的问题!

getSupportLoaderManger()可以替换为LoaderManager.getInstance(this),后面的代码保持不变。所以,最后你的代码将变成:

LoaderManager.getInstance(this).initLoader(0, null, mRecipeLoaderManager);

可以参考Android官方文档: https://developer.android.com/reference/androidx/fragment/app/FragmentActivity#getSupportLoaderManager()