java.lang.IllegalStateException:在更改屏幕方向后打开对话框

时间:2014-10-28 16:31:36

标签: android android-fragments

当我更改屏幕方向时,我得到一个“java.lang.IllegalStateException:无法在onSaveInstanceState之后执行此操作”,然后单击Image并尝试打开一个对话框。我看到超类DialogFragment.show()执行TransactionManager.commit()然后崩溃。它只在我改变方向时才会发生。 我不知道如何避免这种异常。 代码:

public class CustomView extends LinearLayout {
   ....
   final ImageView pic=(ImageView)  v.findViewById(R.id.mypic);  
   student_pic.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            final MyDialog     
                   picker=MyDialog.newInstance(CustomView.this);
            picker.show(getContext());

        }
    });  
}

MyDialog.java:

public class MyDialog extends DialogFragment {
   public static MyDialog newInstance(View f) {
        MyDialog frag = new MyDialog();
        return frag;
    }
   .....
   public void show(Context context)
   {   
       FragmentManager fm=((Activity)context).getFragmentManager();     
       show(fm, "MyDialog"); // The superclass show() does a FragmentManager.commit() and crash
   }
}

堆栈跟踪:

10-29 00:05:07.452      
 621-621/com.myapp.example E/AndroidRuntime﹕ FATAL EXCEPTION:     main
 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
    at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1280)
    at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1291)
    at android.app.BackStackRecord.commitInternal(BackStackRecord.java:548)
    at android.app.BackStackRecord.commit(BackStackRecord.java:532)
    at android.app.DialogFragment.show(DialogFragment.java:230)
    at com.myapp.table.MyDialog.show(MyDialog.java:234)
    at com.myapp.table.MyDialog.show(MyDialog.java:224)
    at com.myapp.table.MyDialog.show(MyDialog.java:217)
    at   com.myapp.table.views.MyCustomView$2$1$1.run(MyCustomView.java:152)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4745)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)

避免此异常的任何帮助?

1 个答案:

答案 0 :(得分:0)

解决方案:我使用AlertDialog来构建对话框,而不是使用DialogFragment。