我有两项活动。一个是 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();
}
答案 0 :(得分:-1)
如果我正确阅读,此代码正在寻找麻烦。每次调用 onResume()时,分数将从 Bollywood.coins 中累加。您的用户将很快发现他们可以通过来回倾斜设备来获得高分,从而导致您的应用重复重启。
您也没有说明 Bollywood.coins 的定义或设置。
我认为你也在对活动生命周期做出一些危险的假设。
相反,当用户完成游戏时,我会让您的 GridView 活动更新共享偏好设置中的分数,然后让主要活动读取这些分数。
此时,我认为我们需要从您的游戏活动中看到一些代码段,以便我们可以看到它正在做什么。
(顺便说一下, GridView 是一个活动的名字很差,因为这个名字也有一个小部件 - 它有点令人困惑。)