2012-03-06 3 views
12

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

My Fragment используется с TabIndicator, и это только один FragmentClass, который используется несколько раз.

Вот нормальный стандартный класс коррекции:

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

ответ

6

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

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

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

+0

Спасибо за ответ, но метод не вызывался никогда. Поэтому я решил это из-за того, что у моего зрителя есть слушатель. В этом слушателе я вызываю метод onHidden-Changed. Глупый, но да, он работает сейчас. – mikepenz

+0

Его никогда не называли. –

9

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

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

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

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

0

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

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     // Do some your work 
    } else { 
     // Do your Work 
    } 
} 
Смежные вопросы