私はAndroid開発の初心者ですので、ご容赦ください。
これは、単純な「モグラたたき」ゲームを書くという私の悲しい試みです。UIは、キャプションのない9つのボタンで構成されています。タイマーは、ユーザーがクリックする必要のあるボタンの1つをランダムに選択します(ボタンにはキャプション「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?
}
...