如何将应用程序对象放入片段类

Posted

技术标签:

【中文标题】如何将应用程序对象放入片段类【英文标题】:How to get application object into fragment class 【发布时间】:2012-07-20 02:31:28 【问题描述】:

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

appCtx = (UnityMobileApp) getApplication();

UnityMobileApp 是我的应用程序类。

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

【问题讨论】:

你必须发布更多代码 sn-p 。谢谢 :) 【参考方案1】:

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

【讨论】:

请注意,在某些情况下,上面的代码会抛出 NPE,因为它可能会在 getActivity() 返回 null 的情况下被调用(例如,在旋转的中间) 在以下位置使用它:@Override public void onActivityCreated(Bundle savedInstanceState) super.onActivityCreated(savedInstanceState); app = ((MyApplication) getActivity().getApplication()); 【参考方案2】:

方法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....

此答案源自 Dzianis Yafima 在 cmets 中由 Ognyan 提出的答案。因此,归功于 Dzianis Yafima'sOgnyan 在 *** 中。

【讨论】:

【参考方案3】:

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

总结你的代码,

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

从android documentation了解更多关于getActivity()的信息

【讨论】:

【参考方案4】:

或者使用 Kotlin

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

【讨论】:

【参考方案5】:

一种较新的方式:

Application application = requireActivity().getApplication();

【讨论】:

【参考方案6】:

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

(activity?.application as YourApplicationClass)

【讨论】:

以上是关于如何将应用程序对象放入片段类的主要内容,如果未能解决你的问题,请参考以下文章

Android如何将listview放入查看寻呼机片段

如何从片段内的列表视图打开链接网址?

如何将列表视图放在片段中

如何将库类或对象传递给片段?

如何在片段中使用Google地图

如何将按钮功能添加到片段中