我正在更改我的Android移动应用程序,以支持平板电脑和手机。为此,我将我的活动类更改为片段。在我的activity类中,我有一个我的应用程序类的实例,如下所示:
appCtx = (UnityMobileApp) getApplication();
UnityMobileApp
是我的应用类。
现在我想在我的片段类中创建相同的实例。你能帮我解决一下吗?
答案 0 :(得分:102)
在片段中使用appCtx = (UnityMobileApp) getActivity().getApplication();
。
答案 1 :(得分:2)
方法getActivity()
可能会返回null。这可能会使您的app崩溃。因此在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的回答。因此,Credit在stackoverflow中转到 Dzianis Yafima的和 Ognyan 。
答案 2 :(得分:1)
一种更新的方式:
Application application = requireActivity().getApplication();
答案 3 :(得分:0)
当您尝试使用片段中的应用程序上下文时,您无法使用getApplication()
,因为这不是Fragment类的方法
因此,您首先必须使用getActivity()
,它将返回片段当前与之关联的片段活动。
总结你的代码,
而不是this.getApplication()
您必须使用getActivity.getApplication()
getActivity()
的更多信息
答案 4 :(得分:0)
或者使用Kotlin
fun bar() {
(activity?.application as UnityMobileApp).let {
it.drink()
} ?: run {
Log.d("DEBUG", "(╯°□°)╯︵ ┻━┻")
}
}