при перезагрузке фрагмента Мне нужно восстановить переменные. Все остальные переменные работают, кроме моего обратного вызова.Как сохранить и восстановить интерфейс на моем фрагменте, используя onSaveInstanceState
У меня есть фрагмент, как это:
общественного класса 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();
}
И Exception я получил это:
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;
}
Можете ли вы изменить в примере, как вы используете экземпляр этого «обратного вызова»? Например. реализация в «AppSectionsPagerAdapter». – vzsg