无法正确使用 Handler
Unable to use Handler properly
我开始学习 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?我能做什么?
Am I using the Handler incorrectly? What can I do?
一个更好的方法是 CountDownTimer,通过使用它你将不必自己处理 Handler 而且你还可以提供 取消一个运行 CountDownTimer.
Everything is working except the First Button
不太确定在单击 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);
这将确保单击 4 个按钮中的任何一个都具有相同的行为(当然取决于答案)
如果您对 CountDownTimer 的 onTick() 方法感到困惑,您可以使用 modified CountDownTimer 这将确保计时器不会错过任何滴答声。
我开始学习 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?我能做什么?
Am I using the Handler incorrectly? What can I do?
一个更好的方法是 CountDownTimer,通过使用它你将不必自己处理 Handler 而且你还可以提供 取消一个运行 CountDownTimer.
Everything is working except the First Button
不太确定在单击 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);
这将确保单击 4 个按钮中的任何一个都具有相同的行为(当然取决于答案)
如果您对 CountDownTimer 的 onTick() 方法感到困惑,您可以使用 modified CountDownTimer 这将确保计时器不会错过任何滴答声。