在我的活動中,顯示一個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