Подтвердить что ты не робот

Как получить объект приложения в класс фрагмента

Я меняю мобильное приложение Android для поддержки как планшета, так и мобильного телефона. Для этого я изменяю свой класс активности на фрагмент. В моем классе активности у меня есть экземпляр класса приложения, созданного как показано ниже:

appCtx = (UnityMobileApp) getApplication();

Где UnityMobileApp - мой класс приложения.

Теперь я хочу создать тот же экземпляр в моем классе фрагмента. Можете ли вы, ребята, помочь мне решить эту проблему?

4b9b3361

Ответ 1

Используйте appCtx = (UnityMobileApp) getActivity().getApplication(); в вашем фрагменте.

Ответ 2

Метод getActivity() может иметь возможность вернуть ноль. Это может привести к сбою в работе вашего приложения. Поэтому безопасно использовать этот метод внутри 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 - х и Ognyan в StackOverflow.

Ответ 3

Поскольку вы пытаетесь использовать контекст приложения из фрагмента, вы не можете использовать getApplication(), потому что это не метод класса Fragment
Поэтому сначала нужно использовать getActivity(), который будет возвращать активность фрагмента, с которой в данный момент связан фрагмент.

для подведения итогов в вашем коде,

вместо this.getApplication() вам нужно использовать getActivity.getApplication()

узнать больше о getActivity() из документация по Android

Ответ 4

Альтернативно используя Kotlin

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