Фрагмент onHiddenChanged не вызывается
Я недавно добавил фрагменты в свои приложения. Для нового приложения мне нужно получить уведомление, как только мой фрагмент будет показан. Так что я могу сделать некоторые вычисления, как только мой фрагмент будет показан снова.
Мой фрагмент используется с TabIndicator, и это только один FragmentClass, который используется несколько раз.
Вот обычный стандартный класс переопределения:
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
}
3 ответа
Все еще ищете ответ? onHiddenChanged не вызывается при первом показе фрагмента. Только когда это меняет состояние.
Из документации:
Вызывается, когда скрытое состояние (возвращаемое isHidden()) фрагмента изменилось. Фрагменты начинаются не скрытыми; это будет вызвано всякий раз, когда фрагмент изменяет состояние от этого.
У меня была такая же проблема.
Я использовал стандартную методику работы с фрагментом ( Создание гибкого пользовательского интерфейса). У меня есть два фрагмента (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();
Я думаю, что мы должны вызвать в скрыть метод 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 вызывается автоматически.
В документации сказано:это будет вызываться всякий раз, когда фрагмент изменяет состояние
Я думаю, что мы должны вручную изменить значение, тогда метод будет вызван.
Вы можете использовать метод setUserVisibleHint для решения некоторых подобных проблем. Надеюсь, это поможет вам.
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// Do some your work
} else {
// Do your Work
}
}
Если вы используете hide() и show(), чтобы скрыть или показать фрагмент, любой метод жизненного цикла не работает. поэтому используется setUserVisibleHint() .