requireActivity和onActivityCreated有什么区别

时间:2020-04-05 16:13:38

标签: android android-fragments

在我的代码中,由于无法确定活动是否可用,因此在onCreateView()之后不方便地加载图片。因为Glide需要活动上下文,所以我将代码段放入onActivityCreated()

@client.event
async def on_message(message):

但是,在查看了Github上的一些最佳实践之后,许多示例将照片加载到onCreateView()中。他们通过使用requireActivity()方法来做到这一点

class A  
{  
   public:  
    int x;  
    A(int a)                // parameterized constructor.  
    {  
      x=a;  
    }  
    A(A &i)               // copy constructor  
    {  
        x = i.x;  
    }  
};  
int main()  
{  
  A a1(20);               // Calling the parameterized constructor.  
 A a2(a1);                //  Calling the copy constructor.  
 cout<<a2.x;  
  return 0;  
}

有人知道在onActivityCreated()之后使用活动引用与从requireActivity()获取活动引用有什么区别吗?

2 个答案:

答案 0 :(得分:9)

我们应该将答案分为两部分。

1。 activity!!requireActivity()

之间的区别

它们都调用getActivity(),并且如果Activity为null,它们都抛出异常。唯一的区别是返回的异常的类型及其消息。当然,requireActivity()会抛出一个更明确的异常。

2。 onActivityCreated()onCreateView()之间的“差异”

onActivityCreated()onCreateView()视图都已经时,在之后 Activity调用方法Fragment已创建。

应该{​​strong>仍然创建视图时,在之前 onCreateView()之前调用方法onActivityCreated()

在您的情况下,Fragment的使用位置没有什么不同。如果您的Glide保留了它的实例,或者FragmentImageView内部,那就大不一样了。

顺便说一句,由于Activity即将被弃用(https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0-alpha02),因此我将在Glide中使用onViewCreated()

答案 1 :(得分:3)

它们是完全不同的事物,除了单词活动之外没有唯一的相似性。

getActivity()(如果是Kotlin,则为activity)是访问创建当前片段的活动的方法。它可以为null,因此您需要检查代码内部的可为空性。

requireActivity()一种方法,该方法返回非null活动实例进行分段或引发异常。

如果您 100%确定在片段的生命周期中活动不是空的,请使用requireActivity(),因为它不需要!符号放在代码中,否则将其放在try-catch块中,以避免 NullPointerException

onActivityCreated()是一种生命周期方法,在创建片段的父活动时会调用它。