Android支持库27.1.0新方法requireActivity(),requireContext()

Qua*_*Dot 12 android android-fragments android-support-library

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

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

daz*_*000 26

它基本上是一个总是返回非null对象或抛出异常的方法.就这些.

来自文档:

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

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

这个问题也提到了背后的原因:

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

/sf/answers/3307733481/

来自reddit:

"我从支持v26更新到支持v27,并且必须在Fragments中为活动/上下文方法添加一堆!!我显然不希望它为null.很高兴有需要*方法为我这样做没有丑陋的!!"

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

  • 所以如果我要使用这个方法`requireContext()`,我需要用try-catch来包装它吗?还是它自己默默地处理异常。 (2认同)
  • 这主要是为了让Kotlin用户获得非null引用(当然,在错误的时刻不会调用它) (2认同)
  • @Smile的整个目的是引发异常。如果您不希望这样做,请使用`getContext`并自行处理null大小写。 (2认同)