當安卓裝置配置【一系列特征的組合:螢幕方向,螢幕像素密度,螢幕尺寸,鍵盤類型,底座模式,以及語言等】發生改變時,可能會有更合适的資源來比對新的裝置環境。
于是,Android會銷毀目前activity,為新配置尋找最佳資源,然後重新開機這個activity。
比如: 目前是豎屏,現在我mainActivity是一個ListView填充,當我滑動一定距離後,我不小心點到了螢幕旋轉,即豎屏變為了橫屏。然後問題來了,手機變為豎屏後,listview的item又回到最開始的地方。原因是因為,當螢幕方向改變,mainactivity先destroy,然後再onCreate,可以重寫onDestroy(), onCreate()然後打Log.d的tag驗證。
解決方法:
在onStop()方法回調之前,系統會自動調用onSaveInstanceState(Bundle outState),除非使用者按傳回鍵(記住,按傳回鍵就是告訴Android,activity用完了,随後該activity就完全從記憶體中被抹掉,自然也就沒有必要為重建儲存資料)。
我們重寫
onSaveInstanceState(Bundle outstate){
super.onSaveInstanceState(outstate);
outstate.putInt("key",currentPosition);
}
這樣,當螢幕旋轉時,會回調上面的函數,然後将目前ListView的position儲存在key中,之後我們可以在onCreate(Bundle savedInstance)中拿到
如下:
public void onCreate(Bundle savedInstance){
super.onCreate();
if(savedInstance != null){
int position = savedInstance.getInt("key");
}
}
這樣就可以拿到之前的position位置,然後listview定位到取出來的position即可。