如何将应用程序对象转换为片段类

时间:2012-07-20 19:21:32

标签: android android-fragments android-fragmentactivity

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

appCtx = (UnityMobileApp) getApplication();

UnityMobileApp是我的应用类。

现在我想在我的片段类中创建相同的实例。你能帮我解决一下吗?

5 个答案:

答案 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()

了解android documentation

中有关getActivity()的更多信息

答案 4 :(得分:0)

或者使用Kotlin

fun bar() {
   (activity?.application as UnityMobileApp).let {
      it.drink()
   } ?: run {
      Log.d("DEBUG", "(╯°□°)╯︵ ┻━┻")
   }
}