Java 使用viewpager的片段的getActivity()或getContext()?

Java 使用viewpager的片段的getActivity()或getContext()?,java,android,Java,Android,从github上的文件选择器库 启动文件选择器时,会调用此代码,但有另一个方法与此相同,但根据生成版本使用getActivity()或getContext(): 我不确定应该使用哪一个,getActivity和getContext之间的区别是什么 第一种方法: public void start(@NonNull Activity activity, int requestCode) { activity.startActivityForResult(createIntent(a

从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);
        }
}
相同的方法但不同的上下文取决于构建版本:

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

TLDR<代码>getActivity添加到API 11中
getContext
添加到API 23中。你应该使用适合你需要的。首先,第一个方法是对
活动
调用
startActivityForResult
,其中第二个方法是对
片段
调用
startActivityForResult
。因此,如果您正在进行
活动
,请使用第一种方法;否则,使用第二种方法

除此之外,还有一个检查的原因是方法被添加到
Fragment
类的时间
getContext
直到API 23才添加;然而,API 11中添加了
getActivity
。值得注意的是,从API 28开始,这两种方法都已被弃用


如果查看不同的方法,您会注意到
getContext
返回
Context
getActivity
返回
Activity
。它们用于类似的事情,但两者之间的区别在于
上下文
活动
应用程序
的基类。通常情况下,获取
活动将允许您使用
上下文
,但有时您可能需要(或想要)应用程序上下文
。有关2个
上下文
实例之间差异的更多信息,请参考

TLDR<代码>getActivity添加到API 11中
getContext
添加到API 23中。你应该使用适合你需要的。首先,第一个方法是对
活动
调用
startActivityForResult
,其中第二个方法是对
片段
调用
startActivityForResult
。因此,如果您正在进行
活动
,请使用第一种方法;否则,使用第二种方法

除此之外,还有一个检查的原因是方法被添加到
Fragment
类的时间
getContext
直到API 23才添加;然而,API 11中添加了
getActivity
。值得注意的是,从API 28开始,这两种方法都已被弃用


如果查看不同的方法,您会注意到
getContext
返回
Context
getActivity
返回
Activity
。它们用于类似的事情,但两者之间的区别在于
上下文
活动
应用程序
的基类。通常情况下,获取
活动将允许您使用
上下文
,但有时您可能需要(或想要)应用程序上下文
。有关2个
上下文
实例之间差异的更多信息,请参考

如果您使用的是Support Library/AndroidX片段(您应该使用它,因为不应该使用框架片段),它们将返回相同的对象。如果您使用的是Support Library/AndroidX片段(您应该使用它,因为不应该使用框架片段),它们将返回相同的对象。请注意,即使对于框架片段也是如此(在API级别差异很重要的情况下),这些方法仍然会返回完全相同的对象,因此您的最后一段并不真正适用,因为您返回的
上下文实际上仍然是一个
活动
。请注意,即使对于框架片段(API级别差异很重要的地方),这些方法仍然会返回完全相同的对象,因此您的最后一段并不真正适用,因为您返回的
上下文实际上仍然是一个
活动