回到HomeScreen活动时,似乎没有更新SharedPreferences

时间:2013-08-02 00:51:08

标签: android sharedpreferences auto-update

我有两项活动。一个是 HomeScreen ,另一个是 GridView 。该应用随HomeScreen Activity打开,其中包含 SharedPreferences ,如下所示。

在我选择播放按钮并转到下一个 GridView 的活动并玩游戏后,它应该将分数添加到 SharedPreferences 但是当我按下返回按钮返回 HomeScreen 活动,除非我强制关闭并重新打开,否则分数似乎不会更新。调用 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();
}

1 个答案:

答案 0 :(得分:-1)

如果我正确阅读,此代码正在寻找麻烦。每次调用 onResume()时,分数将从 Bollywood.coins 中累加。您的用户将很快发现他们可以通过来回倾斜设备来获得高分,从而导致您的应用重复重启。

您也没有说明 Bollywood.coins 的定义或设置。

我认为你也在对活动生命周期做出一些危险的假设。

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

此时,我认为我们需要从您的游戏活动中看到一些代码段,以便我们可以看到它正在做什么。

(顺便说一下, GridView 是一个活动的名字很差,因为这个名字也有一个小部件 - 它有点令人困惑。)