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

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

appCtx = (UnityMobileApp) getApplication();

UnityMobileApp 是我的应用程序类。

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

【问题讨论】:

  • 你必须发布更多代码 sn-p 。谢谢 :)

标签: android android-fragments android-fragmentactivity


【解决方案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 在 stackoverflow 中。

【讨论】:

    【解决方案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)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多