【问题标题】:Android Support Library 27.1.0 new methods requireActivity(), requireContext()Android 支持库 27.1.0 新方法 requireActivity()、requireContext()
【发布时间】:2018-03-14 23:36:08
【问题描述】:

根据支持库变更日志和 Fragment 类文档 (https://developer.android.com/reference/android/support/v4/app/Fragment.html),现在有 requreActivity() 和 requireContext() 等新方法。

与 getActivity() 和 getContext() 相比,这些方法的目的是什么,因为它们仍然可以抛出 IllegalStateExceptions?当找不到活动或上下文时,这是否比返回 null 更可取?我应该简单地将每个 getActivity() 替换为 requireActivity() 吗?

【问题讨论】:

    标签: android android-fragments android-support-library


    【解决方案1】:

    基本上就是要有一个总是返回非空对象或者抛出异常的方法。就是这样。

    来自文档:

    Fragment 现在有 requireContext()、requireActivity()、requireHost() 和 requireFragmentManager() 方法,它们返回等效 get 方法的 NonNull 对象或抛出 IllegalStateException。

    https://developer.android.com/topic/libraries/support-library/revisions.html#27-1-0

    这个 SO 问题也引用了这背后的原因:

    “getActivity 和 getContext 方法返回可为空的类型,因为当 Fragment 未附加到 Activity 时,这些方法已经返回 null。行为没有变化,只是现在显式标记,因此您可以安全地处理它。”

    https://stackoverflow.com/a/47253335/3268303

    来自reddit:

    “我从支持 v26 更新到支持 v27,并且不得不在 Fragments 中的活动/上下文方法中添加一堆 !!,我显然不希望它为空。很高兴有 require* 方法这对我来说没有丑陋的!!s。”

    https://www.reddit.com/r/androiddev/comments/80ork8/support_library_2710_has_been_released/duxp75h/

    【讨论】:

    • 所以如果我要使用这种方法requireContext() 是否需要用try-catch 包装它?还是它自己默默地处理异常。
    • 这主要是为了让 Kotlin 用户允许获取非空引用(当然前提是它没有在错误的时刻被调用)
    • @Smile 的全部目的是抛出异常。如果您不希望这样,请使用 getContext 并自行处理 null 情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多