基本的に正常に動作するフラグメントがあります。onResume メソッドでは、ユーザーがアクティビティ/フラグメントに到達するたびに、API 呼び出しを実行して新しいデータを取得します。
public void onResume(){
super.onResume();
//in pseudo
do async call
success callback
update ui
failure callback
update ui
}
ほとんどの場合、これで問題なく動作します。ただし、更新 ui メソッドが完了する前に、ユーザーが親アクティビティに戻ると問題が発生します。更新 UI は、いくつかのテキスト ビューを設定するだけです。
たとえば、ユーザーがアクティビティとフラグメントに移動すると、上記の onResume が呼び出されます。ユーザーはすぐに親アクティビティに戻ります。非同期呼び出しと更新 UI はまだ完了していません。次のようになります。
致命的な例外: メイン プロセス: com.project.foobar、PID: 4405 java.lang.IllegalStateException: フラグメント MyDetailFragment{41ebb478} がアクティビティに接続されていません
これは、成功コールバックの後に update ui メソッドでスローされます。Square のレトロフィットを使用して API 呼び出しを管理しています。繰り返しますが、これは UI の更新が完了していないときに発生します。終了するのを待って戻ると、すべて問題ありません。
何が間違っているのでしょうか?