Ответ 1
Используйте appCtx = (UnityMobileApp) getActivity().getApplication();
в вашем фрагменте.
Я меняю мобильное приложение Android для поддержки как планшета, так и мобильного телефона. Для этого я изменяю свой класс активности на фрагмент. В моем классе активности у меня есть экземпляр класса приложения, созданного как показано ниже:
appCtx = (UnityMobileApp) getApplication();
Где UnityMobileApp
- мой класс приложения.
Теперь я хочу создать тот же экземпляр в моем классе фрагмента. Можете ли вы, ребята, помочь мне решить эту проблему?
Используйте appCtx = (UnityMobileApp) getActivity().getApplication();
в вашем фрагменте.
Метод 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.
Поскольку вы пытаетесь использовать контекст приложения из фрагмента, вы не можете использовать getApplication()
, потому что это не метод класса Fragment
Поэтому сначала нужно использовать getActivity()
, который будет возвращать активность фрагмента, с которой в данный момент связан фрагмент.
для подведения итогов в вашем коде,
вместо this.getApplication()
вам нужно использовать getActivity.getApplication()
узнать больше о getActivity()
из документация по Android
Альтернативно используя Kotlin
fun bar() {
(activity?.application as UnityMobileApp).let {
it.drink()
} ?: run {
Log.d("DEBUG", "(╯°□°)╯︵ ┻━┻")
}
}