Подтвердить что ты не робот

Фрагмент onHiddenChanged не называется

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

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

Здесь нормальный стандартный класс переопределения:

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

Ответ 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
    }
}