在我的代码中,由于无法确定活动是否可用,因此在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()获取活动引用有什么区别吗?
答案 0 :(得分:9)
我们应该将答案分为两部分。
1。 activity!!
和requireActivity()
它们都调用getActivity()
,并且如果Activity
为null,它们都抛出异常。唯一的区别是返回的异常的类型及其消息。当然,requireActivity()
会抛出一个更明确的异常。
2。 onActivityCreated()
和onCreateView()
之间的“差异”
当onActivityCreated()
和onCreateView()
视图都已经已时,在之后 Activity
调用方法Fragment
已创建。
应该{strong>仍然创建视图时,在之前 onCreateView()
之前调用方法onActivityCreated()
。
在您的情况下,Fragment
的使用位置没有什么不同。如果您的Glide
保留了它的实例,或者Fragment
在ImageView
内部,那就大不一样了。
顺便说一句,由于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()
是一种生命周期方法,在创建片段的父活动时会调用它。
。