0

アプリにハイスコア アクティビティがあります。ゲーム アクティビティが終了すると、Intent.putExtra() を使用してゲームの状態がハイ スコア アクティビティに渡されます。

onCreate() は、extra からゲームを取得し、行をデータベース テーブルに挿入します。

これは正常に動作します...デバイスを横向きモードにするまで。onCreate() は、行をハイスコア テーブルに再度挿入しました。いや、私はそれをよく知っていました、笑。

では、行の挿入を 1 回だけ許可する「ベスト プラクティス」の方法は何ですか? ゲームに関する情報を表示したいので、ゲームデータを破壊したくありません。

アイデア: 1. エクストラにフラグを追加し、行が挿入されたらフラグをクリアします。フラグがクリアされている場合は、行を再度挿入しないでください。2. 重複挿入でキー違反エラーをスローするようにデータベースを編成します。3. エクストラからゲームをコピーし、エクストラから削除して、onPause() と onResume() に保存/復元します。

この状況をどのように処理しますか?

4

2 に答える 2

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!

                     }
    }
于 2012-04-20T03:03:43.010 に答える
1

AndroidManifest.xml のアクティビティ宣言に属性 android:configChanges="orientation" を追加できます。お気に入り

<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
  }
}
于 2012-04-20T03:40:26.867 に答える