IllegalStateException: не может выполнить это действие после onSaveInstanceState с onActivityResult - PullRequest
0 голосов
/ 04 января 2019

Я новичок в разработке Android.У меня есть проблема.Я пробовал последние пару часов, но я не могу понять это.если так, у меня есть популярный вопрос. IllegalStateException: Невозможно выполнить это действие после onSaveInstanceState с ViewPager , но не удалось из-за отсутствия опыта разработки Android.

Вот код:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 1) {
            if(resultCode == RESULT_OK) {
                MyCustomDialogFragment newPopup = new MyCustomDialogFragment();
                newPopup.setMyClickListener(MainActivity.this);
                FragmentManager fragmentManager = getSupportFragmentManager();
                newPopup.show(fragmentManager, "CashReceivePopup");  
          } 
       }
   }

Вот ошибка:

01-04 05: 08: 57.010 13609-13609 / com.nazmul.aznazgame.bitlife D / AndroidRuntime: завершение работы VM 01-04 05: 08: 57.068 13609-13609 / com.nazmul.aznazgame.bitlife E / AndroidRuntime: ОСНОВНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.nazmul.aznazgame.bitlife, PID: 13609 java.lang.RuntimeException: сбой при доставке результата ResultInfo {who = null, request = 4, result = -1, data = Intent {(has extras)}} в действие {com.nazmul.aznazgame.bitlife / com.nazmul.aznazgame.bitlife.MainActivity}: java.lang.IllegalStateException: не удается выполнить это действие после onSaveInstanceState на android.app.ActivityThread.deliverResults (ActivityThread.java:3574) на android.app.ActivityThread.handleSendResult (ActivityThread.jroid:3617).app.ActivityThread.access $ 1300 (ActivityThread.java:151) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1352) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java: 135) на android.app.ActivityThread.main (ActivityThread.java:5254) на java.lang.reflect.Method.invoke (собственный метод) на java.lang.reflect.Method.invoke (Method.java:372) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:903) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:698) Причина: java.lang.IllegalStateException:Невозможно выполнить это действие после onSaveInstanceState в android.support.v4.app.FragmentManagerImpl.checkStateLoss (FragmentManager.java:2053) в android.support.v4.app.FragmentManagerImpl.enqueueAction (FragmentManager.java:20su. And at.v4.app.BackStackRecord.commitInternal (BackStackRecord.java:678) в android.support.v4.app.BackStackRecord.commit (BackStackRecord.java:632) в android.support.v4.app.DialogFragment.show (DialogFragment.java:143) на com.nazmul.aznazgame.bitlife.MainActivity.showEducationDialog (MainActivity.java:1716) на com.nazmul.aznazgame.bitlife.MainActivity.manageActivity (MainActivity.java:604) на совместнойm.nazmul.aznazgame.bitlife.MainActivity.onActivityResult (MainActivity.java:580) в android.app.Activity.dispatchActivityResult (Activity.java:6192) в android.app.ActivityThread.deliverResults (ActivityThread.java:3570) в и.app.ActivityThread.handleSendResult (ActivityThread.java:3617) на android.app.ActivityThread.access $ 1300 (ActivityThread.java:151) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1352) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:135) на android.app.ActivityThread.main (ActivityThread.java:5254) на java.lang.reflect.Method.вызвать (собственный метод) в java.lang.reflect.Method.invoke (Method.java:372) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:903) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:698) 01-04 05: 08: 59.825 13609-13651 / com.nazmul.aznazgame.bitlife I / CrashlyticsCore: загрузка отчета о сборах завершена: 5C2EEA4F018E-0001-3529-63E000005: 08: 59,955 13609-13609 / com.nazmul.aznazgame.bitlife I / Процесс: отправка сигнала.PID: 13609 SIG: 9

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Это общая проблема.У вас есть 2 варианта решения этой проблемы.

  1. вы можете переопределить метод show() и поместить его содержимое в блок try-catch
  2. .диалоговое окно следующим образом

     FragmentManager fm = getSupportFragmentManager();
     MyDialog d = new MyDialog();
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
     ft.add(d, "dialog");
     ft.commitAllowingStateLoss();
    
0 голосов
/ 04 января 2019

Вы должны вызвать super.onActivityResult(requestCode, resultCode, data) перед выполнением любых FragmentTransactions в вашем методе onActivityResult(), так как этот вызов «разблокирует» FragmentManager и отмечает, что вы находитесь в действительном состоянии для выполнения FragmentTransactions.

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

        // This all remains the same
        if (requestCode == 1) {
            if(resultCode == RESULT_OK) {
                MyCustomDialogFragment newPopup = new MyCustomDialogFragment();
                newPopup.setMyClickListener(MainActivity.this);
                FragmentManager fragmentManager = getSupportFragmentManager();
                newPopup.show(fragmentManager, "CashReceivePopup");  
          } 
       }
   }
...