2012-07-16 79 views
2

我知道這個問題已被問到,但我是有點不同:活動重新啓動我的遊戲在屏幕上旋轉(Android)

我有2個不同的佈局文件爲我的遊戲;一個用於縱向模式,一個用於橫向模式。當我旋轉屏幕時,onCreate方法重新啓動我的遊戲(再次創建所有元素)。我不希望這種情況發生,所以我在清單寫這行:

android:configChanges="orientation" 

它的工作原理,的onCreate不叫,但新的佈局沒有被正確顯示!

我試圖把下面的代碼在我的活動,但它只是不斷做奇怪的事情:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.gameview); 
} 

我怎樣才能解決這個問題? 感謝名單傢伙

+0

更改屏幕模式時,您需要保存並恢復數值。 [見這裏] [1] [1]:http://stackoverflow.com/questions/151777/how-do-i-save-an-android-applications-state – Vladimir 2012-07-16 13:17:40

+0

謝謝你,但我只是無法保存我在一個包中創建的所有東西......我有幾個對象和東西。每次有人旋轉屏幕時都必須重新創建一切? – 2012-07-16 13:20:46

+0

你可以把這些東西放在你的應用程序對象中,並從你的活動中訪問它們 – marcinj 2012-07-16 13:30:18

回答

4

首先,瞭解機器人是如何工作的方位改變:

  1. 默認情況下重新啓動活動上方向改變事件(和去扔onCreate)。

  2. 如果你在清單中寫入android:configChanges="orientation" - 這意味着它不會被重新創建,但只是重新繪製和重繪視圖樹。

評論你的代碼:

  • 如果您有不同的取向不同的佈局 - 你必須重新創建活動的方向改變。
  • 方法setContentView應在每個活動生命週期中調用一次。

來處理這種情況一般的做法是:在方法onSaveInstanceState

    1. 保存遊戲狀態在onCreate方法恢復遊戲狀態,如果它提供(savedInstanceState參數是不爲空)。
    2. 刪除監聽配置從清單更改。
  • 0

    您應該使用onRetainNonConfigurationInstance()用於保存狀態和恢復狀態getLastNonConfigurationInstance()的任何對象。或清單中的硬編碼設置android:screenOrientation =「portrait/landscape」。