从github上的文件选择器库中,
启动文件选择器时,将调用此代码,但是还有另一种方法相同,但是根据构建版本使用getActivity()或getContext():
我不确定应该使用哪一个,getActivity和getContext有什么区别?
第一种方法:
public void start(@NonNull Activity activity, int requestCode) {
activity.startActivityForResult(createIntent(activity), requestCode);
}
方法相同,但上下文因构建版本而异:
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
public void start(@NonNull Fragment fragment, int requestCode) {
Context context;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
context = fragment.getContext();
} else {
context = fragment.getActivity();
}
if (context != null) {
fragment.startActivityForResult(createIntent(context), requestCode);
}
}
答案 0 :(得分:0)
TLDR;在API 11中添加了getActivity
在API 23中添加了getContext
。您应该使用适合自己需要的那个。首先,第一种方法是在startActivityForResult
上调用Activity
,第二种方法是在startActivityForResult
上调用Fragment
。因此,如果您使用的是Activity
,请使用第一种方法。否则,请使用第二种方法。
除此之外,进行检查的原因是由于方法何时添加到Fragment
类中。直到API 23才添加getContext
;相反,在API 11中添加了getActivity
。Source请注意,从API 28开始,这两个方法均已弃用。
如果查看不同的方法,您会注意到getContext
返回Context
,而getActivity
返回Activity
。它们用于类似的事情,但是两者之间的区别在于Context
是Activity
和Application
的基类。通常,获取Activity
将使您可以使用Context
,但有时您可能需要(或想要)Application Context
。您可以参考this link以获得有关2个Context
实例之间差异的更多信息。