我是 android-development 的初学者,所以请多多包涵。
这是我编写一个简单的“打地鼠”游戏的可悲尝试。UI 由 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?
}
...