Фрагмент onHiddenChanged не называется
Недавно я добавил фрагменты в свои приложения. Для нового приложения мне нужно будет получить
уведомляется, как только будет показан мой фрагмент. Поэтому я могу сделать некоторые вычисления, как только
фрагмент показан снова.
Мой фрагмент используется с TabIndicator и используется только один FragmentClass
несколько раз.
Здесь нормальный стандартный класс переопределения:
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
}
Ответы
Ответ 1
Ищете ответ? onHiddenChanged не вызывается при первом показе фрагмента. Только при изменении состояния.
Из документации:
Вызывается, когда скрытое состояние (как указано isHidden()) фрагмента изменилось. Фрагменты начинают не скрываться; это будет вызываться всякий раз, когда фрагмент меняет свое состояние.
Ответ 2
У меня была такая же проблема.
Я использовал стандартную практическую работу с фрагментом (Создание гибкого пользовательского интерфейса).
У меня есть два фрагмента (ListItemsFragment и InfoItemFragment).
При использовании обычного размера экрана я заменяю ListItemsFragment на InfoItemFragment и
метод onHiddenChanged не вызывает автоматический.
FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction();
mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem");
mFragmentTransaction.addToBackStack(null);
mFragmentTransaction.commit();
Я думаю, что мы должны вызвать метод hide FragmentTransaction. Например:
ListItemsFragment mListItemsFragment;
FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction();
mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem");
if (mListItemsFragment != null) {
mFragmentTransaction.hide(mListItemsFragment);
}
mFragmentTransaction.addToBackStack(null);
mFragmentTransaction.commit();
И теперь метод onHiddenChanged работает нормально. Когда пользователь нажимает кнопку "назад", mListItemsFragment снова показывает и метод onHiddenChanged называется автоматическим.
В документации сказано:
это будет вызываться всякий раз, когда фрагмент меняет состояние из
Я думаю, что мы должны изменить значение вручную, тогда будет вызван метод.
Ответ 3
Вы можете использовать метод setUserVisibleHint для решения некоторой подобной проблемы. Надеюсь, это поможет вам.
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// Do some your work
} else {
// Do your Work
}
}