我正在更改我的 android 移动应用程序以支持平板电脑和手机。为此,我将我的活动类更改为片段。在我的活动类中,我创建了一个应用程序类的实例,如下所示:
appCtx = (UnityMobileApp) getApplication();
UnityMobileApp
我的应用程序类在哪里。
现在我想在我的片段类中创建相同的实例。你们能帮我解决这个问题吗?
我正在更改我的 android 移动应用程序以支持平板电脑和手机。为此,我将我的活动类更改为片段。在我的活动类中,我创建了一个应用程序类的实例,如下所示:
appCtx = (UnityMobileApp) getApplication();
UnityMobileApp
我的应用程序类在哪里。
现在我想在我的片段类中创建相同的实例。你们能帮我解决这个问题吗?
appCtx = (UnityMobileApp) getActivity().getApplication();
在您的片段中使用。
该方法getActivity()
可能有可能返回 null。这可能会使您的应用程序崩溃。因此在onActivityCreated()
. 例如:
private UnityMobileApp appCtx;
.
.
...
@Override
public View onCreateView(...){
...
}
@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
appCtx = ((UnityMobileApp) getActivity().getApplication());
}
...
//access the application class methods using the object appCtx....
该答案源自 Ognyan 在评论中提出的 Dzianis Yafima 的回答。因此,在 stackoverflow 中,功劳归于 Dzianis Yafima和 Ognyan。
或者使用 Kotlin
fun bar() {
(activity?.application as UnityMobileApp).let {
it.drink()
} ?: run {
Log.d("DEBUG", "(╯°□°)╯︵ ┻━┻")
}
}
如果有人正在寻找 Kotlin 版本。这对我有用:
(activity?.application as YourApplicationClass)
当您尝试使用片段中的应用程序上下文时,您不能使用getApplication()
,因为这不是片段类的方法
所以您首先必须使用getActivity()
将返回片段当前关联的片段活动。
总结你的代码,
而不是this.getApplication()
你必须使用getActivity.getApplication()
getActivity()
从android 文档中了解更多信息
一种较新的方式:
Application application = requireActivity().getApplication();