1. ホーム
  2. android

[解決済み] onActivityResultからDialogFragmentを表示する

2023-06-19 19:47:21

質問

私のフラグメントのonActivityResultに次のようなコードがあります。

onActivityResult(int requestCode, int resultCode, Intent data){
   //other code
   ProgressFragment progFragment = new ProgressFragment();  
   progFragment.show(getActivity().getSupportFragmentManager(), PROG_DIALOG_TAG);
   // other code
}

しかし、以下のようなエラーが発生します。

Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState   

何が起こっているのか、どうすればこれを修正できるのか、どなたかご存知ですか?私は Android サポート パッケージを使用していることに留意してください。

どのように解決するのですか?

Androidサポートライブラリを使用している場合、onResumeメソッドはフラグメントを処理する場所として適切ではありません。onResumeメソッドの説明を参照してください。 http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html#onResume%28%29

ということで、私から見た正しいコードは以下のようになります。

private boolean mShowDialog = false;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
  super.onActivityResult(requestCode, resultCode, data);

  // remember that dialog should be shown
  mShowDialog = true;
}

@Override
protected void onResumeFragments() {
  super.onResumeFragments();

  // play with fragments here
  if (mShowDialog) {
    mShowDialog = false;

    // Show only if is necessary, otherwise FragmentManager will take care
    if (getSupportFragmentManager().findFragmentByTag(PROG_DIALOG_TAG) == null) {
      new ProgressFragment().show(getSupportFragmentManager(), PROG_DIALOG_TAG);
    }
  }
}