2013-02-23 41 views
15

私は活動の断片と話をしようとしていますが、断片が見えるかどうかわかりません。フラグメントが存在しない場合、キャストのために例外がスローされるため、nullチェックもできません。フラグメントが存在するかどうかを確認する方法?

フラグメントが存在するかどうかを確認するにはどうすればよいですか?

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

キャストを実行した後で、ヌルチェックを実行できませんか? –

+0

私は試しました。キャスト後、オブジェクトには必要な要素が含まれていません。 –

+0

あなたのアクティビティのxmlファイルにこのframgentを追加しました – twocity

答えて

26

最初にキャストしないでください。

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

これが機能しない場合は、受信している例外を使用してスタックトレースを送信してください。

+0

私のために働いてくれました。 – OAEI

10

参照へのキャストnullは、プリミティブに例外をスローしません。

findFragmentById()またはfindFragmentByTag()を使用して参照を取得し、nullでない場合は参照のisAdded()またはisVisible()を確認してください。

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

「キャスティングヌル」に関する素晴らしい点 –

関連する問題