我开始学习Android开发。我正在构建一个基本的加法游戏,用户必须单击显示两个数字相加的按钮。有四个 Textview
个。第一个问题的答案是time limit
。第二个为用户提供question
。第三个给出用户的current score
,最后一个给出所选的打开是正确还是不正确。
除第一个按钮外,其他所有功能均正常工作。每次按下按钮时,计数就非常快。
// When First button is pressed
public void onClickButton1(View view) {
correctIncorrect.setVisibility(View.VISIBLE);
if (Integer.parseInt(button1.getText().toString())==sum) {
correctIncorrect.setText("Correct");
correctUpdater();
}
else {
correctIncorrect.setText("Incorrect");
inCorrectUpdater();
}
}
//Similar to all the buttons
//To Update the score
public void correctUpdater() {
n++;
yourScore++;
score.setText(Integer.toString(yourScore) + "/" + Integer.toString(n));
update();
}
public void inCorrectUpdater() {
n++;
score.setText(Integer.toString(yourScore) + "/" + Integer.toString(n));
update();
}
// To update the timer
//=======================================================================//
public void resetTimer() {
timer.setText(Integer.toString(temp)+"s");
if (temp == 0) {
inCorrectUpdater();
update();
}
else {
timeUpdater();
}
}
public void timeUpdater() {
Handler timeHandler = new Handler();
Runnable timeRunnable = new Runnable() {
@Override
public void run() {
temp--;
resetTimer();
}
};
timeHandler.postDelayed(timeRunnable,1000);
}
//=================================================================//
// Updater function
public void update() {
correctIncorrect.setVisibility(View.INVISIBLE);
Random random = new Random();
int a = random.nextInt(21);
int b = random.nextInt(21);
question.setText(Integer.toString(a) + " + " + Integer.toString(b));
Log.i("info", "onCreate: a = " + a);
Log.i("info", "onCreate: b = " + b);
sum = a+b;
Log.i("info", "onCreate: sum = " + sum);
int whichButton = random.nextInt(4);
Log.i("info", "onCreate: random button is " + whichButton);
values.clear();
for (int i = 0; i< 4; i++) {
if (i == whichButton) {
values.add(sum);
}
else {
values.add(random.nextInt(50));
}
Log.i("info", "onCreate: value[" + i + "] = " + values.get(i));
}
button1.setText(Integer.toString(values.get(0)));
button2.setText(Integer.toString(values.get(1)));
button3.setText(Integer.toString(values.get(2)));
button4.setText(Integer.toString(values.get(3)));
temp = 10;
resetTimer();
}
我错误地使用了 Handler 吗?我该怎么办?
答案 0 :(得分:0)
我使用处理程序不正确吗?我该怎么办?
一种更好的方法是CountDownTimer,使用此方法,您自己就不必与处理程序打交道,并且还可以取消 >正在运行的CountDownTimer。
除“第一个按钮”外,所有其他功能均正常工作
不太确定是什么会导致在onClick()中具有相同代码的按钮单击时导致不同的行为。但是您可以考虑对这4个按钮使用相同的 onClickListener ,
View.OnClickListener myListener = new View.OnClickListener() {
@Override
public void onClick(View button) {
correctIncorrect.setVisibility(View.VISIBLE);
if (Integer.parseInt(button.getText().toString())==sum) {
correctIncorrect.setText("Correct");
correctUpdater();
}
else {
correctIncorrect.setText("Incorrect");
inCorrectUpdater();
}
}
};
button1.setOnClickListener(myListener);
button2.setOnClickListener(myListener);
button3.setOnClickListener(myListener);
button4.setOnClickListener(myListener);
这将确保单击这四个按钮中的任何一个都具有相同的行为(当然取决于答案)
如果您对CountDownTimer的onTick()方法感到困惑,则可以使用modified CountDownTimer来确保计时器不会错过任何滴答声。