我正在查看文档并找到了这个
此类在 API 级别 P 中已弃用。
为什么在android P中不推荐使用片段?
Ian 的中型帖子(2018 年 2 月 28 日)给了我们一个解释。他是 Google 的 Android 框架开发人员。
支持库 27.1.0 中的加载程序
对于 Support Library 27.1.0,我重写了 LoaderManager 的内部结构,该类为 Loaders API 提供支持,我想解释更改背后的原因以及未来的预期。
Loaders 和 Fragments,一段历史
从一开始,Loaders 和 Fragments 就紧紧地绑在了一起。这意味着 FragmentActivity 和 Fragment 中的很多代码都是为了支持 Loaders,尽管事实上它们确实是相当独立的。…</p>27.1.0 的变化 在 27.1.0
中,Loaders 的技术债务已经大大减少:………
注意:显然,这些更改仅适用于支持库加载器。如果您正在使用 Android 框架加载器,请尽快切换到支持库加载器。框架加载程序 API 没有错误修复或改进计划。
似乎其中的代码已被重构Fragment
,FragmentActivity
以使 Loaders 成为可选依赖项。
根据发布说明,新的实现基于Lifecycle
.
在支持库 26.1.0中,Fragment
并 FragmentActivity
已采用Lifecycle
.
这是一个将支持库与架构组件的生命周期集成的特殊版本。如果您不使用 Lifecycles 库,则无需从 26.0.2 更新。有关详细信息,请参阅架构组件发行说明。
重要变化
- Fragment 和 FragmentActivity(AppCompatActivity 的基类)现在从 Architecture Components 实现 LifecycleOwner 接口。
相比之下, Android P 中的Fragment和Activity并没有实现该接口LifecycleOwner
。
在Google+ 帖子中(在ThanosFisherman 的回答中提到),Ian 发表了评论:
你不能在框架代码发布后更改它——它实际上是及时冻结的。这意味着没有新功能,更重要的是没有错误修复。这不是一个好的开发者体验,特别是当我们在支持库中有一个完全支持的、最新的、向后兼容的版本时。
我认为这就是 Android P 不采用Lifecycle
. 因此Fragment
在 Android P 中已弃用。
如果有人正在寻找通过类名实例化片段的方法。
Fragment.instantiate(context, fragmentClass)
val fm: FragmentManager = ...
fm.fragmentFactory.instantiate(ClassLoader.getSystemClassLoader(), fragmentClass)
文件名: FragmentManagerExt.kt
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
fun FragmentManager.instantiate(className: String): Fragment {
return fragmentFactory.instantiate(ClassLoader.getSystemClassLoader(), className)
}
val fragment = supportFragmentManager.instantiate(fragmentClassName)
在Android x中使用supportFragmentManager 代替 fragmentManager。