我正在修改我的安卓移动应用程序,以支持平板电脑和手机。为此,我将我的活动类更改为片段类。在我的活动类中,我创建了以下应用程序类实例:
appCtx = (UnityMobileApp) getApplication();
这里的UnityMobileApp
是我的Application类。
现在我想在我的Fragment类中创建相同的实例。你们能帮我解决这个问题吗?
我正在修改我的安卓移动应用程序,以支持平板电脑和手机。为此,我将我的活动类更改为片段类。在我的活动类中,我创建了以下应用程序类实例:
appCtx = (UnityMobileApp) getApplication();
这里的UnityMobileApp
是我的Application类。
现在我想在我的Fragment类中创建相同的实例。你们能帮我解决这个问题吗?
在你的片段中使用appCtx = (UnityMobileApp) getActivity().getApplication();
。
getActivity()
返回null的情况下被调用(例如,在旋转过程中)。 - Ognyan@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
app = ((MyApplication) getActivity().getApplication());
}
翻译为中文:重写方法:@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
app = ((MyApplication) getActivity().getApplication());
}
在此处使用:
获取应用程序实例并将其赋值给变量app。 - Dzianis YafimaugetActivity()
方法可能返回 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....
本答案源于Dzianis Yafima在stackoverflow上回答Ognyan的提问。因此,感谢 Dzianis Yafima 和 Ognyan。
如果有人在寻找Kotlin版本,这个对我有效:
(activity?.application as YourApplicationClass)
Application application = requireActivity().getApplication();
getApplication()
,因为它不是Fragment类的方法。因此,您首先必须使用getActivity()
,它将返回与该片段当前关联的Fragment Activity。this.getApplication()
,您必须使用getActivity.getApplication()
。getActivity()
的更多信息,请参见android documentation。或者使用 Kotlin
fun bar() {
(activity?.application as UnityMobileApp).let {
it.drink()
} ?: run {
Log.d("DEBUG", "(╯°□°)╯︵ ┻━┻")
}
}