我是一个总的初学者,因此请在这个问题上与我相处。Android应用程序在恢复后丢失/改变状态
这是我写一个简单的“捶鼹鼠”游戏的悲伤尝试。用户界面由9个没有标题的按钮组成。计时器随机选择一个必须由用户点击的按钮(按钮获得标题“X”)。如果用户选择正确的按钮,他会得到10分。如果没有及时点击按钮(或错误的按钮),将从乐谱中减去10分。
正如你所看到的,我添加了一个OnClickListener到每个按钮并删除onCreate-Method中的初始标题(“Button1”,“Button2”...)。一切工作看起来都很好,直到我离开应用程序然后再回来。所有按钮突然再次具有其初始标题。计时器仍然运行(每秒钟降低分数),但没有任何按钮发生变化。
现在我知道这可能与活动生命周期有关,我已经阅读了它。不幸的是,我的英语不是最好的,而且我对理解这个概念有点困难。也许有人愿意简单地向我解释这一点?
public class MainActivity extends Activity {
private static int[] buttons = {R.id.button1, R.id.button2, ...};
private static List<Button> buttonlist = new ArrayList<Button>();
private static TextView scoreboard;
private static Timer timer = new Timer();
private static int score;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scoreboard = (TextView) findViewById(R.id.textView1);
for (int i = 0; i < 9; i++) {
buttonlist.add((Button) findViewById(buttons[i]));
buttonlist.get(i).setText("");
// add OnClickListener for each Button
((Button) buttonlist.get(i)).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//if correct Button is pressed add 20 to score
if ("X".equals(((Button) v).getText().toString())) {
score += 20;
//and set button-text to "" again ...
((Button) v).setText("");
}
else {
score -= 10;
}
}
});
}
// Start Game
timer.schedule(new MyTimerTask(), 0, 1000);
}
private class MyTimerTask extends TimerTask {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
score -= 10;
scoreboard.setText("Your Score: " + score);
//clear buttons
for (int i = 0; i < 9; i++)
buttonlist.get(i).setText("");
//pick random button as next target
buttonlist.get((int) (Math.random() * (9 - 1) + 1)).setText("X");
}
});
}
}
@Override
protected void onResume() {
super.onResume();
// Do something here?
}
...
感谢您的快速回复!我现在看起来更清楚:) – subarachnid