当我更改屏幕方向时,我得到一个“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)
避免此异常的任何帮助?
答案 0 :(得分:0)
解决方案:我使用AlertDialog来构建对话框,而不是使用DialogFragment。