Мы используем Dialogfragment для отображения некоторых диалогов, а иногда это вызывает «IllegalStateException: не может выполнить это действие после onSaveInstanceState».Android: все еще преследует «Невозможно выполнить это действие после onSaveInstanceState» в некоторых случаях
В прошлом это происходило часто, и мне удалось уменьшить количество этого исключения IllegalStateException, написав диалог DialogHelper для показа/увольнения.
К сожалению, иногда я до сих пор получаю отчеты об авариях и смотрю на это, и я просто не могу понять, как правильно исправить эту проблему правильно.
Сообщенные сбои в данный момент происходят при нажатии кнопки, и мы хотим показать диалог (например, DateSliderDialog), но я не могу воспроизвести Crash: /.
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);
}
}
}
}
Как вы можете видеть, я уже проверка:
- ли активность отделки?
- Работает ли операция (через флаг на мероприятии)?
У кого-нибудь есть ключ, почему это все еще происходит и как его исправить?
Спасибо за ваши предложения и ответы
Я уже делают это, и фиксированные все вопросы при увольнении, но не при показе dialogFragment. Вышеупомянутая проблема возникает только для показа диалоговых фрагментов, а не для отклонения. – byemute
обратитесь к следующей теме: http://stackoverflow.com/questions/10114324/show-dialogfragment-from-onactivityresult – Nidhi
Я уже проверил это, прежде чем публиковать свой вопрос. Единственное решение, которое я вижу там, заключается в использовании FragmentTransaction с commitAllowingStateLoss(), поскольку мой DialogFragment показан onClick, и я не могу контролировать, происходит ли onClick до или после сохранения состояния. Есть ли другие решения, кроме использования dialogFragment.show() с FragmentTranscation, где я устанавливаю commitAllowingStateLoss()? – byemute