15

アクティビティからフラグメントと通信しようとしていますが、フラグメントが表示されているかどうかわかりません。フラグメントが存在しない場合、キャストのために例外がスローされるため、null チェックもできません。

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

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

2 に答える 2

30

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

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

それがうまくいかない場合は、受け取った例外とともにスタックトレースを投稿してください。

于 2013-02-23T15:25:00.037 に答える
12

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

findFragmentById()またはを使用findFragmentByTag()して参照を取得し、null かどうかを確認します。そうでない場合は、参照のisAdded()またはを確認しますisVisible()

PlayerFragment p = (PlayerFragment) mManager.findFragmentById(R.id.bottom_container);
if( p != null && p.isAdded()){
   p.onNotificationListener.updateUI();
}
于 2013-02-23T15:25:19.053 に答える