【发布时间】:2015-08-07 02:39:41
【问题描述】:
当我的片段重新加载时,我需要恢复变量。除了我的回调之外,所有其他变量都在工作。
我有一个这样的片段:
公共类 ClosetFragment 扩展片段 {
private String [] closetSessions = null;
private DBName dbName = null;
private String token = null;
private RefreshCallback callback= null;
public ClosetFragment(String [] closetSessions, DBName dbName, String token, RefreshCallback callback){
this.closetSessions = closetSessions;
this.dbName = dbName;
this.token = token;
this.callback = callback;
}
public ClosetFragment(){
}
@Override
public void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("closetSessions", (Serializable) this.closetSessions);
outState.putSerializable("dbName", (Serializable) this.dbName);
outState.putSerializable("token", (Serializable) this.token);
outState.putSerializable("callback", (Serializable) this.callback);
}
我的回调是:
public interface RefreshCallback extends Serializable{
public void onNeedrefresh();
}
我得到的例外是:
AppSectionsPagerAdapter 是实现我的回调的类。
05-25 12:04:06.037: E/AndroidRuntime(10822): FATAL EXCEPTION: main
05-25 12:04:06.037: E/AndroidRuntime(10822): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = br.com.closet4share.app.adapters.AppSectionsPagerAdapter$1)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.os.Parcel.writeSerializable(Parcel.java:1279)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.os.Parcel.writeValue(Parcel.java:1233)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.os.Parcel.writeMapInternal(Parcel.java:591)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.os.Bundle.writeToParcel(Bundle.java:1627)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.os.Parcel.writeBundle(Parcel.java:605)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:135)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.os.Parcel.writeTypedArray(Parcel.java:1102)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:378)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.os.Parcel.writeParcelable(Parcel.java:1254)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.os.Parcel.writeValue(Parcel.java:1173)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.os.Parcel.writeMapInternal(Parcel.java:591)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.os.Bundle.writeToParcel(Bundle.java:1627)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.os.Parcel.writeBundle(Parcel.java:605)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2535)
05-25 12:04:06.037: E/AndroidRuntime(10822): at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3151)
非常感谢您的帮助!
这就是我实现回调的方式:
@Override
public Fragment getItem(int i) {
Fragment fragment = null;
fragment = new ClosetFragment(i,closetSessions,dbName,token, new RefreshCallback(){
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void onNeedrefresh() {
AppSectionsPagerAdapter.this.notifyDataSetChanged();
}
});
mPageReferences.put(i, new WeakReference<Fragment>(fragment));
return fragment;
}
【问题讨论】:
-
您能否在示例中编辑您如何使用实例化此
callback?例如。AppSectionsPagerAdapter中的实现。
标签: android fragment parcelable serializable