【问题标题】:requireActivity() and requireContext() in kotlinkotlin 中的 requireActivity() 和 requireContext()
【发布时间】:2021-08-13 07:30:41
【问题描述】:

Fragment中的requireActivity()requireContext()的用途是什么?

【问题讨论】:

  • 你能更清楚地解释你的问题吗

标签: android kotlin android-fragments


【解决方案1】:

因为它们可能为空。在java中,你可以调用它们。但在 Kotlin 中,它们被声明为可为空的返回类型。所以你有 3 个选择:

  1. 您不确定它是否为空: activity?.let { //做你需要做的。}
  2. 您确定它不会为 null,因此您可以调用 activity!!.doSomething,但它很难看。
  3. 这是最干净的选项,您可以确定它不会为空,但如果以某种方式出现,则会为此准备一个特定的异常 (IllegalStateException),它会被抛出,而不是一般的 NullPointerException。

【讨论】:

  • 我看不出requireActivity().!!. 之间的区别,因为它们都会抛出异常,而您作为程序员必须追赶它们。 !!. 对我来说看起来不那么难看。它已经内置在 kotlin 中。
  • @SMBiggs 是的,我认为requireActivity. 只是一个偷偷摸摸的!!.
【解决方案2】:

查看官方 Android 源代码文档。这些方法返回带有空检查的活动/上下文。

requireActivity()

public final FragmentActivity requireActivity() {
        FragmentActivity activity = getActivity();
        if (activity == null) {
            throw new IllegalStateException("Fragment " + this + " not attached to an activity.");
        }
        return activity;
    }

requireContext()

public final Context requireContext() {
        Context context = getContext();
        if (context == null) {
            throw new IllegalStateException("Fragment " + this + " not attached to a context.");
        }
        return context;
    }

【讨论】:

    猜你喜欢
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2018-02-16
    相关资源
    最近更新 更多