Android P 中不推荐使用的片段
Posted
技术标签:
【中文标题】Android P 中不推荐使用的片段【英文标题】:Fragments deprecated in Android P 【发布时间】:2018-09-01 22:31:44 【问题描述】:我在查看documentation 并找到了这个
此类在 API 级别 P 中已弃用。
为什么在 android P 中不推荐使用 Fragment?
【问题讨论】:
投反对票/考虑投反对票的人,能否请您也给出一个正当理由?我认为这是一个真实的问题,可以为我们所有人提供一些有见地的答案。 只有当你问做某事的人时,做某事的原因才有意义。在这种情况下,您必须询问 Google。 现在只有支持实现在运行,在 2018 年使用 Fragments 是否仍然有意义?改用什么? @RoyalGriffin,反对者是仇恨者。他们无法解释他们的行为,他们只是看到 SO 的规则(这是不合逻辑的),然后用减号标记并要求版主关闭或删除问题(有时是正确答案)。 @TheincredibleJan Google 代表正在阅读关于 SO 的 Android 相关问题并与之互动,因此它是正确的论坛。 【参考方案1】:如果有人正在寻找通过类名实例化片段的方法。
老办法:
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)
【讨论】:
感谢兄弟支持FragmentManager解决方案..【参考方案2】:在 Android x 中使用 supportFragmentManager 代替 fragmentManager。
【讨论】:
【参考方案3】:支持库片段将继续存在。 Google 鼓励您使用支持库版本在所有 API 级别、向后移植的错误修复以及生命周期和 ViewModel 支持中获得一致的行为。
Old Reference Link(Dead)
New Reference Link
【讨论】:
Google+ 已关闭,您在哪里可以找到相关信息? @OscarLeif 见medium.com/androiddevelopers/…【参考方案4】:支持库 27.1.0 中的重写
Ian's medium post(2018 年 2 月 28 日)对此进行了解释。他是 Google 的 Android 框架开发人员。
支持库 27.1.0 中的加载器
对于 Support Library 27.1.0,我重写了 LoaderManager 的内部结构,该类为 Loaders API 提供支持,我想解释更改背后的原因以及未来的预期。
Loaders 和 Fragments,一段历史 从一开始,Loaders 和 Fragments 就紧紧地绑在了一起。这意味着,FragmentActivity 和 Fragment 中的许多代码都是为了支持 Loaders,尽管事实上它们确实是相当独立的。 …
27.1.0 中的变化 在 27.1.0 之后,Loaders 的技术债务大大减少了:……
…
注意:显然,这些更改仅适用于支持库加载器。如果您正在使用 Android 框架加载器,请尽快切换到支持库加载器。框架加载程序 API 没有错误修复或改进计划。
似乎Fragment
和FragmentActivity
中的代码已被重构,以使加载程序成为可选依赖项。
根据the release note,新的实现是基于Lifecycle
。
重要变化Loaders 的底层实现已被重写为使用 Lifecycle。
架构组件
在Support Library 26.1.0、Fragment
和FragmentActivity
中采用了Lifecycle
。
这是一个将支持库与架构组件的生命周期集成的特殊版本。如果您不使用 Lifecycles 库,则无需从 26.0.2 更新。有关详细信息,请参阅架构组件发行说明。
重要变化
Fragment 和 FragmentActivity(AppCompatActivity 的基类)现在从架构组件实现 LifecycleOwner 接口。
相比之下,Android P 中的Fragment 和Activity 并没有实现接口LifecycleOwner
。
在the Google+ post(ThanosFisherman’s answer中提到),Ian发表了评论:
您无法在框架代码发布后更改它 - 它实际上是及时冻结的。这意味着没有新功能,更重要的是没有错误修复。这不是一个好的开发者体验,尤其是当我们在支持库中有完全支持的、最新的、向后兼容的版本时。
我认为这就是 Android P 不采用Lifecycle
的原因。因此,Fragment
在 Android P 中已被弃用。
【讨论】:
以上是关于Android P 中不推荐使用的片段的主要内容,如果未能解决你的问题,请参考以下文章