How to get application object into fragment class

后端 未结 4 2125
感情败类
感情败类 2020-12-29 18:15

I am changing my android mobile app to support both tablets and mobile phone. For this I am changing my activity class into fragment. In my activity class I have an instance

相关标签:
4条回答
  • 2020-12-29 18:23

    Alternatively using Kotlin

    fun bar() {
       (activity?.application as UnityMobileApp).let {
          it.drink()
       } ?: run {
          Log.d("DEBUG", "(╯°□°)╯︵ ┻━┻")
       }
    }
    
    0 讨论(0)
  • 2020-12-29 18:25

    As you are trying yo use application context from fragment you can not use getApplication() because that isn't method of Fragment class
    So you first have to use the getActivity() which will return a Fragment Activity to which the fragment is currently associated with.

    to sumup in your code,

    instead of this.getApplication() you have to use getActivity.getApplication()

    know more about getActivity() from android documentation

    0 讨论(0)
  • 2020-12-29 18:34

    Use appCtx = (UnityMobileApp) getActivity().getApplication(); in your fragment.

    0 讨论(0)
  • 2020-12-29 18:40

    The method getActivity() may have possibility to return null. This may crash your app.So it is safe to use that method inside the onActivityCreated(). Eg:

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

    This answer is derived from Dzianis Yafima's answer asked by Ognyan in comments. Thus the Credit goes to Dzianis Yafima's and Ognyan in stackoverflow.

    0 讨论(0)
提交回复
热议问题