2016-08-24 7 views
1

Dialogfragmentを使用していくつかのダイアログを表示していますが、「IllegalStateException:onSaveInstanceStateの後にこのアクションを実行できません。Android:場合によっては「onSaveInstanceStateの後にこのアクションを実行できません」という依然として悩んでいる

これまで頻繁に起こったことで、DialogHelperを記述してダイアログを表示/非表示にすることでこのIllegalStateExceptionの数を減らすことができました。

残念ながら、私はまだこれについてのクラッシュレポートを取得し、それをもう一度見て、この問題を正しく修正する方法を見つけることができません。

現時点で報告されているクラッシュがボタンのonClickで発生していて、ダイアログ(たとえば、DateSliderDialog)を表示したいがクラッシュを再現できない:/。

mFromDateButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (!isFinishing()) { 
       String title= getString(R.string.dateSliderTitle); 
       DateSliderDialog dateSliderDialog= DateSliderDialog.newInstance(title, getMinFromDate().getTimeInMillis(), getFromDateForDialog().getTimeInMillis(), DateUtils.getEndOfUniverseDate().getTime()); 
       DialogHelper.showDialog(getSupportFragmentManager(), dateSliderDialog, InquireReservationActivity.this, String.valueOf(FROM_DATE_DIALOG_ID)); 
      } 
     } 
    }); 

あなたが見ることができるようにDialogHelper.showDialog(...)メソッド

public static void showDialog(FragmentManager fragmentManager, DialogFragment dialogFragment, Context context, String dialogTag) { 
    if (fragmentManager != null && dialogFragment != null && (dialogFragment.getDialog() == null || !dialogFragment.getDialog().isShowing())) { 
     if (context instanceof MyActivity) { 
      if(!((MyActivity)context).isFinishing() && ((MyActivity)context).mIsActivityRunning) { 
       dialogFragment.show(fragmentManager, dialogTag); 
      } 
     } else if (context instanceof MyListActivity) { 
      if(!((MyListActivity)context).isFinishing() && ((MyListActivity)context).mIsActivityRunning) { 
       dialogFragment.show(fragmentManager, dialogTag); 
      } 
     } else if (context instanceof MyPreferenceActivity) { 
      if(!((MyPreferenceActivity)context).isFinishing() && ((MyPreferenceActivity)context).mIsActivityRunning) { 
       dialogFragment.show(fragmentManager, dialogTag); 
      } 
     } else { 
      if(!((Activity)context).isFinishing()) { 
       dialogFragment.show(fragmentManager, dialogTag); 
      } 
     } 
    } 
} 

を呼び出す、私はすでにをチェックしています:

  • 活動の仕上げですか?
  • アクティビティは実行中ですか(アクティビティのフラグを使用)ですか?

これはどうして起こっているのか、それを修正する方法を知っている人はいますか?

ご提案してくれてありがとう、あなたはダイアログを却下されているときはいつでも

答えて

1

に答えて、私はすでにこれとdialogFragmentを示すとき却下ではなく、ときにすべての問題を修正しそれを行う

dialogFragment.dismissAllowingStateLoss(); 
+0

を使用しています。上記の問題は、単に、dialogFragmentsを表示するために発生し、解消するためには発生しません。 – byemute

+0

次のスレッドを参照してください:http://stackoverflow.com/questions/10114324/show-dialogfragment-from-onactivityresult – Nidhi

+0

私は既に私の質問を投稿する前にそれをチェックしました。 DialogFragmentがonClickで表示されているため、commitAllowingStateLoss()でFragmentTransactionを使用するだけで、状態が保存される前または後にonClickが発生した場合は制御できません。私がcommitAllowingStateLoss()を設定したFragmentTranscationでdialogFragment.show()を使用する以外の解決策はありますか? – byemute

関連する問題