57

我正在更改我的 android 移动应用程序以支持平板电脑和手机。为此,我将我的活动类更改为片段。在我的活动类中,我创建了一个应用程序类的实例,如下所示:

appCtx = (UnityMobileApp) getApplication();

UnityMobileApp我的应用程序类在哪里。

现在我想在我的片段类中创建相同的实例。你们能帮我解决这个问题吗?

4

6 回答 6

138

appCtx = (UnityMobileApp) getActivity().getApplication();在您的片段中使用。

于 2012-07-20T19:57:16.687 回答
4

该方法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 YafimaOgnyan

于 2018-04-27T11:57:44.120 回答
1

或者使用 Kotlin

fun bar() {
   (activity?.application as UnityMobileApp).let {
      it.drink()
   } ?: run {
      Log.d("DEBUG", "(╯°□°)╯︵ ┻━┻")
   }
}
于 2019-05-21T23:41:23.123 回答
1

如果有人正在寻找 Kotlin 版本。这对我有用:

(activity?.application as YourApplicationClass)
于 2021-11-04T12:18:36.767 回答
1

当您尝试使用片段中的应用程序上下文时,您不能使用getApplication(),因为这不是片段类的方法
所以您首先必须使用getActivity()将返回片段当前关联的片段活动。

总结你的代码,

而不是this.getApplication()你必须使用getActivity.getApplication()

getActivity()android 文档中了解更多信息

于 2017-11-30T08:11:38.533 回答
1

一种较新的方式:

Application application = requireActivity().getApplication();
于 2021-02-10T08:33:16.827 回答