在我的活动中,显示一个Custom DialogFragement。但是,当我最小化的应用程序,而对话框打开我得到这个错误当最小化并打开对话框时,活动崩溃
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = xxx.xxx.MyActivity$24)
at android.os.Parcel.writeSerializable(Parcel.java:1468)
at android.os.Parcel.writeValue(Parcel.java:1416)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:686)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330)
at android.os.Bundle.writeToParcel(Bundle.java:1079)
at android.os.Parcel.writeBundle(Parcel.java:711)
at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:144)
at android.os.Parcel.writeTypedArray(Parcel.java:1254)
at ....
... 23 more
java.io.NotSerializableException: xxx.xxx.MyActivity
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1344)
xxxxx
眼下解决这个问题我已经在这似乎作品的对话片段设置这一点,但我不喜欢这几样的肮脏的技巧
@Override
public void onPause() {
dismiss();
super.onPause();
}
任何人都可以告诉我是什么原因导致此异常?
定制DialogFragment的OnCreate:
public static MyCustomDialog newInstance(double lat, double lng, MyListener listener) {
MyCustomDialog dialogFragment = new MyCustomDialog();
Bundle bundle = new Bundle();
bundle.putDouble(ARG_LAT, lat);
bundle.putDouble(ARG_LNG, lng);
bundle.putSerializable(ARG_LISTENER, listener);
dialogFragment.setArguments(bundle);
return dialogFragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_layout, null, false);
final double lat = getArguments().getDouble(ARG_LAT);
final double lng = getArguments().getDouble(ARG_LNG);
listener = (MyListener) getArguments().getSerializable(ARG_LISTENER);
TextView saveBtn = (TextView) view.findViewById(R.id.save_btn);
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/* some processing */
listener.onSave();
}
});
return view;
}
myListener的是一个接口。我一开始以为这可能是问题所在,但即使我没有放入包中,我也会得到同样的错误,所以它必须来自其他方面。一个按钮内
活动侧点击:
MyCustomDialog myCustomDialog = MmyCustomDialog.newInstance(lat, lon, listener);
myCustomDialog.show(getSupportFragmentManager(), "tag");
它看起来像试图保存包中的某些内容以便稍后重新启动活动。如果在对话框打开的情况下更改方向,它是否也会崩溃? – Nemesis
是的,它也崩溃 – Johny19