2012-03-06 14 views
12

Recientemente agregué Fragmentos a mis aplicaciones. Para una nueva aplicación necesitaré recibir notificado tan pronto como se muestre mi fragmento. Así que puedo hacer algunos cálculos tan pronto como mi fragmento se muestre nuevamente.Fragmento onHiddenChanged no llamado

Mi Fragmento se utiliza con un TabIndicator y es solo un FragmentClass que se usa varias veces.

Ésta es la clase de anulación normal estándar:

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

Respuesta

6

Todavía estás buscando una respuesta? onHiddenChanged no se llama la primera vez que se muestra un fragmento. Solo cuando cambia de estado.

De la documentación:

llama cuando el estado oculto (tal como lo devuelve isHidden()) del fragmento ha cambiado. Los fragmentos comienzan no ocultos; esto se llamará siempre que el fragmento cambie de estado a partir de eso.

+0

Gracias por la respuesta, pero el método no se llamó nunca. Así que lo resolví debido al hecho de que mi viewpager tiene un oyente. En este oyente, llamo al método onHidden-Changed. Estúpido, pero sí, funciona ahora. – mikepenz

+0

Nunca ha sido llamado. –

9

Tuve el mismo problema.

Utilicé la práctica de Standart con el fragmento (Building a Flexible UI). Tengo dos fragmentos (ListItemsFragment y InfoItemFragment). Cuando se usa el tamaño de pantalla normal, reemplazo ListItemsFragment en InfoItemFragment y el método enHiddenChanged no se llama automático.

FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction(); 
mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem"); 
mFragmentTransaction.addToBackStack(null); 
mFragmentTransaction.commit(); 

Creo que debemos llamar al método hide FragmentTransaction. Por ejemplo:

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(); 

Y ahora el método enHiddenChanged funciona bien. Cuando el usuario vuelve a hacer clic en el botón mListItemsFragment, se muestra y el método enHiddenChanged se llama automático.

En la documentación dijeron: este será llamado cada vez que el fragmento de cambiar de estado que

Creo que hay que valor de cambio manual de entonces el método será llamado.

0

Puede usar el método setUserVisibleHint para resolver algún problema similar. Espero que te ayude.

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