Получение: java.lang.IllegalStateException: не может выполнить это действие после onSaveInstanceState при попытке показать DialogFragment
Итак, я делаю это после того, как пользователь возвращается к моей деятельности из платежного сервиса:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bundle metadata = getMetadata();
if (metadata == null || requestCode != metadata.getInt(REQ_CODE)) {
return;
}
if (resultCode == RESULT_OK) {
EventBus.getDefault().post(new PaymentResult(data, true));
} else {
EventBus.getDefault().post(new PaymentResult(data, false));
}
}
В методе подписки на PaymentResult
Я показываю фрагмент диалога (точнее - я пытаюсь показать фрагмент диалога):
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPaymentResult(PaymentResult result) {
String message;
if (result.getStatus()) {
message = "ok";
} else {
message = "baaaad";
}
DialogFragment newFragment = NotificationFragment.newInstance(message);
newFragment.show(((AppCompatActivity)mContext).getSupportFragmentManager(), "notification");
}
Но я бью это исключение. Как это побороть?
1 ответ
Вам нужно использовать commitAllowingStateLoss(), чтобы избежать этого исключения
показать фрагмент этого
FragmentManager fm = ((AppCompatActivity)mContext).getSupportFragmentManager();
NotificationFragment newFragment = NotificationFragment.newInstance(message);
fm.beginTransaction()
.add(newFragment, "notification")
.commitAllowingStateLoss();
fm.executePendingTransactions();
Когда вы добавляете DialogFragment без идентификатора контейнера, он отображается как Dialog, иначе он будет отображаться как обычный фрагмент, если указан идентификатор контейнера.
executePendingTransactions () существует для синхронной фрагментной транзакции, которая является необязательной.