3

如何處理取向事件發生的所有狀態?處理方向變化的狀態

喜歡的東西:

  • 開始(節省一些屏幕狀態)
  • 發生時
  • (動畫目的)
  • 它發生前後(加載屏幕狀態)

我知道即onConfigurationChanged可以處理方向更改。我試過這個:

public void onConfigurationChanged(Configuration cfg) { 
     saveState(); 

     super.onConfigurationChanged(cfg); 

     loadState(); 
    } 

在saveState上,我在SharedPreferences上存儲在Gallery上查看的lastIndex。 在loadState上,我從SharedPreferences獲取lastIndex,並將其設置爲Gallery上的當前值。

我試着也把在LoadState中的onResume方法,但發生方向改變後它不叫。

回答

4

開始之前(節省一些屏幕狀態)

使用onSaveInstanceState()和/或onRetainNonConfigurationInstance()上已發生(動畫目的)時叫setRetainInstance(true)

和/或一個片段

這是由操作系統來處理。

它發生後(加載屏幕狀態)

使用onRestoreInstanceState()和/或getLastNonConfigurationInstance()(如果你去的片段路線,您的數據是天生就仍然存在)

我知道onConfigurationChanged可以處理方向更改。

@EightEight's answer涵蓋了這個很好。

3

您可能有點困惑。

這是從api docs

公共無效onConfigurationChanged當設備配置更改,而您的活動運行由系統調用(配置NEWCONFIG)。請注意,只有在您選擇的配置中您想要使用清單中的configChanges屬性進行處理時纔會調用它。

如果您在AndroidManifest中指定了參數,系統會通過調用onConfigurationChanged()來通知您方向更改。如果你沒有設置標誌,那麼Android會以適當的方向開始一個新的活動,然後致電onResume()

如果您想在活動結束取向改變,並且都制定了通知,我會建議在您的孩子一個視圖覆蓋的的onDraw()方法。那麼一切都完成了,你可以從方向改變之前恢復狀態。

HTH。

相關問題