android-fragments Kotlin中的requireActivity()和requireContext()函数

uyto3xhc  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(371)

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

1bqhqjot

1bqhqjot1#

因为它们可能是空的。在java中,你可以直接调用它们。但是在Kotlin中,它们被声明为可空的返回类型。所以你有3个选择:
1.不确定是否为空:

activity?.let { it -> 
     it.doSomething() //do what you need to do.
}

1.您确定它不会为空,以便可以调用

activity!!.doSomething()

但是它很难看,也不清楚。它没有显示出意图。你真的期望这个活动是可用的吗?或者这只是Java到Kotlin转换后的剩余部分?
1.这是最干净的选项,您可以确定它不会为null,但如果它确实为null,则会为此准备一个特定的异常(IllegalStateException),并且会抛出该异常,而不是一般的NullPointerException。

requireActivity().doSomething() // throws IllegalStateException("Fragment " + this + " not attached to an activity.")
 requireContext().doSomething()  // throws IllegalStateException("Fragment " + this + " not attached to a context.")
e37o9pze

e37o9pze2#

查看官方Android源代码文档。这些方法返回活动/上下文,并进行空值检查。

要求活动()

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

要求上下文()

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

相关问题