2014-07-25 26 views
0

我覺得有一些東西我真的不明白的機制的onSaveInstanceState: 我有一個包含幾個DATAS類:什麼保存在onSaveInstanceState?

public class Site implements Serializable { 

    private static final long serialVersionUID = 1L; 
    // used to save device language when the application starts 
    private String deviceLanguage; 
    private int deviceWifiState; 
    private int deviceWifiNetworkId; 

    private String localeLanguage; 

    // URLs to access various files to describe site and points of interests 
    private String wifiSSID = null; 
    private String wifiWPAKey = null; 
    private String url = null; 
    private String flagsDir = "flags/"; 
    private String flagsUrl = null; 
    private String mediasDir = "medias/"; 
    private String mediasUrl = null; 
    private String descriptionFileUrl = null; 
    private FragmentActivity activity; 

    private ArrayList<Language> listLanguages = null; 
    private ArrayList<PointOfInterest> listPointsOfInterest = null; 

    ... 
    // and some getter/setter 
} 

所以MainActivity哄擡Fragment_init其開始填寫站點類。 主要是ArrayList。

Fragment_init是不是在後面的堆棧。 作業完成後,它會自動提交()一個新的Fragment_selectLanguage,用戶在繼續初始化之前設置其語言。 完成後,此線程將放入後退堆棧中,並提交第三個Fragment_play()。

所有片段實施以下onsaveInstanceState方法,Bundle將其onViewCreated方法取回。

@Override 
public void onSaveInstanceState(Bundle saveInstanceState) { 
    super.onSaveInstanceState(saveInstanceState); 

    saveInstanceState.putSerializable(FRAGMENT_SELECT_LANGUAGE_SITE, (Serializable) site); 
} 

而在第三個片段,如果我改變則屏幕方向回到以前的片段,我得到一個空指針異常,當它使用listeLanguages,正常初始化在第一個片段,它是空的。

當我檢查Site類時,我發現大部分數據都在裏面,但有些數據通常是空的。

我錯過了什麼?我在想整個Site類都被救了!

Regards,

回答

0

所以其實我改變網站從序列化到Parcelable再完美的作品使用:

@Override 
public void onSaveInstanceState(Bundle saveInstanceState) { 
    super.onSaveInstanceState(saveInstanceState); 
    Log.d("2ndGuide", "MainActivity: onSaveInstanceState"); 
    saveInstanceState.putParcelable(MAIN_ACTIVITY_SITE, site); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.d("2ndGuide", "MainActivity: onCreate"); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
     site = new Site(); 
    } else { 
     site = (Site)savedInstanceState.getParcelable(MAIN_ACTIVITY_SITE); 
    } 
} 
相關問題