0

我的应用程序有高分活动。当游戏活动结束时,它使用 Intent.putExtra() 将游戏状态传递给高分活动

onCreate() 从 extra 中提取游戏并将行插入到数据库表中。

这工作正常......直到我将设备切换到横向模式。onCreate() 再次将该行插入到高分表中。呵呵,我比那更清楚,哈哈。

好的,那么只允许插入一次行的“最佳实践”方式是什么?我不想核对游戏数据,因为我希望显示有关游戏的信息。

思路: 1. 在附加项中添加一个标志,并在插入行后将其清除。如果标志已清除,则不要再次插入该行。2. 组织数据库在 dup 插入时抛出密钥冲突失败。3. 将游戏从 extras 中复制出来,从 extras 中删除,并在 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 回答