2012-03-06 6 views
12

Recentemente ho aggiunto Frammenti alle mie applicazioni. Per una nuova applicazione avrò bisogno di ottenere notificato non appena viene mostrato il mio frammento. Quindi posso fare alcuni calcoli non appena il mio frammento viene mostrato di nuovo.Frammento onHiddenChanged non chiamato

Il mio frammento viene utilizzato con un indicatore TabIndicator ed è solo un FragmentClass che viene utilizzato un paio di volte da .

Ecco il normale classe di override di serie:

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

risposta

6

Ancora alla ricerca di una risposta? onHiddenChanged non viene chiamato la prima volta che viene mostrato un frammento. Solo quando cambia stato.

Dalla documentazione:

Chiamato quando lo stato nascosto (come restituito da isHidden()) del frammento è cambiato. I frammenti iniziano non nascosti; questo sarà chiamato ogni volta che il frammento cambia stato da quello.

+0

Grazie per la risposta, ma il metodo non è stato chiamato mai. Quindi l'ho risolto a causa del fatto che il mio viewpager ha un ascoltatore. In questo ascoltatore chiamo il metodo onHidden-Changed. Stupido ma si, ora funziona. – mikepenz

+0

Non è mai stato chiamato. –

9

Ho avuto lo stesso problema.

Ho utilizzato linee guida standard di lavoro con frammento (Building a Flexible UI). Ho due frammenti (ListItemsFragment e InfoItemFragment). Quando si usano le normali dimensioni dello schermo, sostituisco ListItemsFragment su InfoItemFragment e il metodo suHiddenChanged non chiama automatico.

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

Penso che dobbiamo richiamare il metodo hide FragmentTransaction. Ad esempio:

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

E ora il metodo suHiddenChanged funziona correttamente. Quando l'utente fa clic sul pulsante indietro, mListItemsFragment mostra nuovamente e il metodo onHiddenChanged viene chiamato automatico.

Nella documentazione detta: sarà chiamata ogni volta che il frammento cambia stato da detto

Credo si debba valore di variazione manuale quindi metodo verrà chiamato.

0

È possibile utilizzare il metodo setUserVisibleHint per risolvere alcuni problemi simili. Spero possa aiutarti.

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