getActivity()或getContext()用于带有viewpager的片段?

时间:2019-12-17 00:45:02

标签: java android

从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);
        }
}

1 个答案:

答案 0 :(得分:0)

TLDR;在API 11中添加了getActivity在API 23中添加了getContext。您应该使用适合自己需要的那个。首先,第一种方法是在startActivityForResult上调用Activity,第二种方法是在startActivityForResult上调用Fragment。因此,如果您使用的是Activity,请使用第一种方法。否则,请使用第二种方法。

除此之外,进行检查的原因是由于方法何时添加到Fragment类中。直到API 23才添加getContext;相反,在API 11中添加了getActivitySource请注意,从API 28开始,这两个方法均已弃用。

如果查看不同的方法,您会注意到getContext返回Context,而getActivity返回Activity。它们用于类似的事情,但是两者之间的区别在于ContextActivityApplication的基类。通常,获取Activity将使您可以使用Context,但有时您可能需要(或想要)Application Context。您可以参考this link以获得有关2个Context实例之间差异的更多信息。