2012-04-20 114 views
0

我的應用程序有一個高分活動。當遊戲活動結束時,它使用Intent.putExtra()將遊戲狀態傳遞給高分活動。onCreate()將遊戲從extra中拉出並將該行插入到數據庫表中。onCreate()與數據庫插入

這工作正常...直到我把設備轉到橫向模式。 onCreate()再次將行插入高分表。哈哈,我知道比這更好,哈哈。

好吧,那麼只允許插入一次的'最佳實踐'方法是什麼?因爲我希望顯示關於遊戲的信息,所以我不想破壞遊戲數據。

想法: 1.添加一個標誌到extras並在插入行後清除它。如果標誌清楚,請勿再次插入該行。 2.組織數據庫以在dup插入中引發密鑰違例失敗。 ()和onResume()

你會如何處理這種情況?

+0

你有沒有考慮重寫你的活動的'onConfigurationChanged()'方法在其他它不是在重新創造自己設備翻轉?這可能是一個可行的解決方案嗎? – 2012-04-20 03:05:22

回答

1

你可以做這樣的事情設置一個標誌:

@Override 
     protected void onSaveInstanceState(Bundle outState) { 
      super.onSaveInstanceState(outState); 
      outState.putBoolean("high_score_saved", true); 

     } 

    @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
        if (!savedInstanceSate.getBoolean("high_score_saved", false){ 
         //save high score! 

        } 
    } 
1

您可以添加屬性的android:configChanges =「方向」,以在AndroidManifest.xml您的活動宣言。 像

<activity android:name=".TestActivity" android:configChanges="orientation" /> 

這是可以做到,如果你的活動並不當朝向的變化而改變其佈局。如果你想通過重寫此方法來改變方向改變的佈局,你可以像這樣

@Override 
public void onConfigurationChanged(Configuration newConfig) { 

    super.onConfigurationChanged(newConfig); 

    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     //your code 
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
    //your code 
    } 
}