2013-02-23 33 views
15

Ich versuche, mit dem Fragment aus der Aktivität zu sprechen, aber ich bin mir nicht sicher, ob das Fragment sichtbar oder nein ist. Wenn das Fragment nicht existiert, kann ich nicht einmal eine Nullprüfung durchführen, da es aufgrund des Castings eine Ausnahme auslöst.Wie überprüft man, ob das Fragment existiert?

Wie überprüfe ich, ob das Fragment existiert?

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

Können Sie nicht tun, um die Kontrolle null und erst danach das Casting tun? –

+0

Ich habe es versucht. Nach dem Umwandeln enthält das Objekt keine benötigten Elemente. –

+0

haben Sie diesen Framgent in der XML-Datei Ihrer Aktivität hinzugefügt – twocity

Antwort

26

Werfen Sie es nicht zuerst.

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

Wenn das nicht funktioniert packen Sie den Stacktrace mit der Ausnahme, die Sie erhalten.

+0

Arbeitete für mich perfekt..danke .. !! – OAEI

10

Casting null zu einer Referenz wird keine Ausnahme zu einem Primitiv werfen, wird es.

Verwenden findFragmentById() oder findFragmentByTag() einen Verweis zu bekommen und wenn sie null überprüfen, wenn nicht, überprüfen Sie die Referenz der isAdded() oder isVisible().

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

schöner Punkt über 'casting null' –

Verwandte Themen