如何将应用程序对象放入片段类
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's 和 Ognyan 在 *** 中。
【讨论】:
【参考方案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)
【讨论】:
以上是关于如何将应用程序对象放入片段类的主要内容,如果未能解决你的问题,请参考以下文章