1

我有两个活动。一个是HomeScreen,另一个是GridView。该应用程序打开 HomeScreen Activity,其SharedPreferences如下所示。

在我选择播放按钮并移动到下一个GridView活动并玩游戏后,它应该将分数添加到SharedPreferences但是当我按下后退按钮返回HomeScreen Activity 时,分数似乎没有除非我强制关闭并重新打开,否则会更新。调用onResume()方法将使分数加倍而不是一次。

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    addScores();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home_screen);

    play = (Button) findViewById(R.id.play_game);
    play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showMovieDialog();
        }
    });
}

public void addScores(){
    final SharedPreferences app_preferences =
        PreferenceManager.getDefaultSharedPreferences(this);
    totalCoins = app_preferences.getInt("Scores: ",0);
    SharedPreferences.Editor editor = app_preferences.edit();
    totalCoins = totalCoins + Bollywood.coins;

    tCoins = (TextView)findViewById(R.id.totalCoins);
    tCoins.setText("" + totalCoins);

    editor.putInt("Scores: ", totalCoins);
    editor.commit();
}
4

1 回答 1

-1

如果我没看错,这段代码就是在找麻烦。每次调用onResume()时,分数将从Bollywood.coins累加。您的用户将很快发现他们可以通过来回倾斜他们的设备来获得高分,从而导致您的应用程序反复重启。

你也没有说Bollywood.coins是在哪里定义或设置的。

我认为您还对活动生命周期做出了一些危险的假设。

相反,当用户完成游戏时,我会让您的GridView活动更新共享首选项中的分数,然后让主要活动读取这些分数。

在这一点上,我认为我们需要从您的游戏活动中查看一些代码片段,以便我们了解它在做什么。

(顺便说一句,GridView是一个糟糕的活动名称,因为还有一个同名的小部件——它有点令人困惑。)

于 2013-08-02T01:11:40.847 回答