В последнее время я много работал с фрагментами, и мне было любопытно, что лучше всего использовать ссылку на родительскую активность фрагмента. Было бы лучше продолжать вызов getActivity() или иметь переменную parentActivity, инициализированную обратным обращением onActivityCreated.
Лучшая практика для ссылки на родительскую активность фрагмента?
Ответ 1
Это фактически включено в официальный документ Android на Fragments. Если вам нужен контекст родительской активности (например, Toast, Dialog), вы бы назвали getActivity()
. Когда вам нужно вызвать методы обратного вызова в интерфейсе Fragment, вы должны использовать переменную обратного вызова, которая onAttach(...)
в onAttach(...)
.
public static class FragmentA extends ListFragment {
ExampleFragmentCallbackInterface mListener;
...
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mListener = (ExampleFragmentCallbackInterface ) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement ExampleFragmentCallbackInterface ");
}
}
...
}
Ответ 2
getActivity() лучше. Вам не нужно поддерживать переменную для хранения (всегда, до цикла приложения!). При необходимости вызовите метод и используйте!:)
Ответ 3
Если вы находитесь во фрагменте, который вызывается из некоторого действия, чтобы получить ссылку на родительское действие, вы можете вызвать его внутри onViewCreated() или более поздних методов перехвата фрагмента напрямую, просто для того, чтобы убедиться, что родительское действие не является нулевым
getActivity()
Если вы действительно хотите убедиться, что вам нужно сначала проверить
if (getActivity() != null){ // then your logic with getActivity()}