2013-02-23 31 views
15

Sto cercando di parlare al frammento dell'attività, ma non sono sicuro che il frammento sia visibile o no. Se il frammento non esiste, non posso nemmeno eseguire il controllo nullo poiché genera un'eccezione a causa del lancio.Come verificare se il frammento esiste?

Come si verifica se il frammento esiste?

PlayerFragment = (PlayerFragment) mManager.findFragmentById(R.id.bottom_container); 
playerFragment.onNotificationListener.updateUI(); 
+0

Non è possibile eseguire il controllo Null e solo dopo eseguire il casting? –

+0

Ho provato. Dopo aver lanciato l'oggetto non contiene elementi necessari. –

+0

hai aggiunto questo framgent nel file xml della tua attività – twocity

risposta

26

Non lanciarlo inizialmente.

Fragment f = mManager.findFragmentById(R.id.bottom_container); 
if(f != null && f instanceof PlayerFragment) { 
    PlayerFragment playerFragment = (PlayerFragment) f; 
    playerFragment.onNotificationListener.updateUI(); 
} 

Se ciò non funziona, inviare lo stacktrace con l'eccezione che si sta ricevendo.

+0

Ha funzionato perfettamente per me..grazie .. !! – OAEI

10

La trasmissione di null a un riferimento non genererà un'eccezione, ad una primitiva, lo farà.

Utilizzare findFragmentById() o findFragmentByTag() per ottenere un riferimento e verificare se è nullo, in caso contrario, controllare il riferimento isAdded() o isVisible().

PlayerFragment p = (PlayerFragment) mManager.findFragmentById(R.id.bottom_container); 
if(p != null && p.isAdded()){ 
    p.onNotificationListener.updateUI(); 
} 
+0

bel punto su 'casting null' –