Фрагмент 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() .

Другие вопросы по тегам