Фрагмент onHiddenChanged не вызывается - PullRequest
17 голосов
/ 06 марта 2012

Я недавно добавил фрагменты в свои приложения. Для нового приложения мне нужно получить уведомил, как только мой фрагмент будет показан. Так что я могу сделать некоторые расчеты, как только мой фрагмент показан снова.

Мой фрагмент используется с TabIndicator, и используется только один FragmentClass несколько раз.

Вот обычный стандартный класс переопределения:

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
}

Ответы [ 3 ]

11 голосов
/ 30 августа 2013

У меня была такая же проблема.

Я использовал стандартную практическую работу с фрагментом ( Создание гибкого пользовательского интерфейса ). У меня есть два фрагмента (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 вызывается автоматически.

В документации сказано: это будет вызываться всякий раз, когда фрагмент изменяет состояние с этого

Я думаю, что мы должны вручную изменить значение, тогда будет вызван метод.

8 голосов
/ 16 марта 2012

Все еще ищете ответ? onHiddenChanged не вызывается при первом показе фрагмента. Только когда это меняет состояние.

Из документации:

Вызывается, когда скрытое состояние (возвращаемое isHidden ()) фрагмента изменилось. Фрагменты начинаются не скрытыми; это будет вызываться всякий раз, когда фрагмент изменяет состояние с этого.

3 голосов
/ 29 ноября 2017

Вы можете использовать setUserVisibleHint метод для решения некоторых подобных проблем.Надеюсь, это поможет вам.

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // Do some your work
    } else {
        // Do your Work
    }
}
...