我们使用 Dialogfragment 来显示一些对话框,有时这些会导致“IllegalStateException:onSaveInstanceState 后无法执行此操作”。
在过去,这种情况经常发生,我可以通过编写 DialogHelper 来显示/关闭对话框来减少此 IllegalStateException 的数量。
不幸的是,有时我仍然会收到有关此问题的崩溃报告并再次查看它,但我无法找到最终正确解决此问题的方法。
目前报告的崩溃发生在单击按钮时,我们想显示一个对话框(例如 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);
}
}
}
}
如您所见,我已经在检查:
- 活动结束了吗?
- Activity 是否正在运行(通过 Activity 上的标志)?
有谁知道为什么这仍然发生以及如何解决它?
感谢您的建议和回答