解決策を探しましたが、これは一般的な問題ではないようです。
アプリがサーバーに接続している間に不確定なダイアログ スピナーを表示し、そのダイアログをクリアして、要求が完了したときに別のダイアログを表示したいと考えています。Fragment
互換パッケージを使用しています。問題は、2 番目のダイアログが表示される前にスピナーが削除されていないことです。
ダイアログを表示し、現在のダイアログを削除するコードは次のとおりです。
void displayDialog(int type, String message) {
Log.i(logTag, "displayDialog: " + type);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
Log.i(logTag, "removing previous dialog");
ft.remove(prev); //TODO maybe use ((DialogFragment)dialog).dismiss(); ?
}
ft.addToBackStack(null);
// Create and show the dialog.
DialogFragment newFragment = DialogHelperFragment.newInstance(type, message);
newFragment.show(ft, "dialog");
}
このバグのトラブルシューティングに使用している呼び出しコードは次のとおりです。
displayDialog(DialogHelperFragment.DIALOG_PROGRESS, null);
displayDialog(DialogHelperFragment.DIALOG_PURCHASE_SUCCESS, null);
対応する LogCat 出力は次のとおりです。
06-25 13:53:35.497: I/tag(11008): displayDialog: 8
06-25 13:53:35.497: I/tag(11008): displayDialog: 7
06-25 13:53:35.897: I/tag Dialog Helper(11008): Creating Dialog: 8
06-25 13:53:35.907: I/tag Dialog Helper(11008): Creating Dialog: 7
問題はそれです
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
最初のダイアログは、displayDialog() が再度呼び出されるまでに作成またはアタッチされていないため、null を返します。
どんなヒントでも非常に役立ちます。