我怎样才能以特定的方式重复这个倒数计时器......?
How can I repeat this countdown timer in a specific way...?
游戏中随机数(loadG1)输出并显示4秒。四秒后,它就会消失,用户必须输入它的值才能获得分数。一旦用户按下回车键,他们的输入框就会消失,程序必须等到较长的 CountDownTimer(目前为 18 秒)结束才能看到他们的分数。到目前为止,他们只能得到一分。我想要发生的是在他们输入答案(无论正确与否)后重复 4 秒倒数计时器的内容。虽然,我希望在倒数计时器再次启动时也输出 loadG1 。所以他们输入一个答案,一个新的随机 loadG1 显示另外 4 秒然后消失,他们输入另一个答案,等等......直到更长的计时器结束。我该怎么做呢?我知道循环不起作用,正如我尝试的那样,它只是让我的应用程序崩溃了。如果有人能帮我做到这一点,并告诉我如何实现代码,我将不胜感激。
注意:我是学习 Java 和 Android 开发的新手。
非常感谢。
代码如下:
public class game1 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game1);
final Button loseStarter1;
loseStarter1 = (Button) findViewById(R.id.Starter1);
loseStarter1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loseStarter1.setVisibility(View.GONE);
final int[] score = {0};
Random generateG1 = new Random();
final int loadG1 = generateG1.nextInt(1000000)+10000;
final TextView number = (TextView) findViewById(R.id.number);
number.setText(" "+loadG1);
new CountDownTimer(18000, 1000) {
@Override
public void onTick (long millisUntilFinished) {
}
public void onFinish() {
TextView result = (TextView) findViewById(R.id.outcome);
result.setText("Score: "+ score[0]);
TextView prompt = (TextView) findViewById(R.id.prompt);
prompt.setVisibility(View.GONE);
}
}.start();
new CountDownTimer(4000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
number.setVisibility(View.GONE);
final TextView prompt = (TextView) findViewById(R.id.prompt);
prompt.setText(" Enter the number");
final EditText input = (EditText) findViewById(R.id.enterAnswer);
input.setVisibility(View.VISIBLE);
input.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
Editable answer = input.getText();
int finalAnswer = Integer.parseInt(String.valueOf(answer));
int finalLoadG1 = Integer.parseInt(String.valueOf(loadG1));
input.setVisibility(View.GONE);
prompt.setVisibility(View.GONE);
if (finalAnswer == finalLoadG1) {
score[0]++;
}
return true;
default:
}
}
return false;
}
});
}
}.start();
};
});
}
}
已解决
我在分数[0]++之后加上以下内容:
number.setVisibility(View.VISIBLE);
final int loadG1 = generateG1.nextInt(1000000) + 10000;
number.setText(" " + loadG1);
input.getText().clear();
start();
这样,所有必要的更改都已完成,计时器重新开始计时。我还修改了 prompt TextView 的可见性,以确保它仅在用户能够输入答案时出现。花了我一段时间,但这已经解决了。
游戏中随机数(loadG1)输出并显示4秒。四秒后,它就会消失,用户必须输入它的值才能获得分数。一旦用户按下回车键,他们的输入框就会消失,程序必须等到较长的 CountDownTimer(目前为 18 秒)结束才能看到他们的分数。到目前为止,他们只能得到一分。我想要发生的是在他们输入答案(无论正确与否)后重复 4 秒倒数计时器的内容。虽然,我希望在倒数计时器再次启动时也输出 loadG1 。所以他们输入一个答案,一个新的随机 loadG1 显示另外 4 秒然后消失,他们输入另一个答案,等等......直到更长的计时器结束。我该怎么做呢?我知道循环不起作用,正如我尝试的那样,它只是让我的应用程序崩溃了。如果有人能帮我做到这一点,并告诉我如何实现代码,我将不胜感激。 注意:我是学习 Java 和 Android 开发的新手。 非常感谢。
代码如下:
public class game1 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game1);
final Button loseStarter1;
loseStarter1 = (Button) findViewById(R.id.Starter1);
loseStarter1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loseStarter1.setVisibility(View.GONE);
final int[] score = {0};
Random generateG1 = new Random();
final int loadG1 = generateG1.nextInt(1000000)+10000;
final TextView number = (TextView) findViewById(R.id.number);
number.setText(" "+loadG1);
new CountDownTimer(18000, 1000) {
@Override
public void onTick (long millisUntilFinished) {
}
public void onFinish() {
TextView result = (TextView) findViewById(R.id.outcome);
result.setText("Score: "+ score[0]);
TextView prompt = (TextView) findViewById(R.id.prompt);
prompt.setVisibility(View.GONE);
}
}.start();
new CountDownTimer(4000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
number.setVisibility(View.GONE);
final TextView prompt = (TextView) findViewById(R.id.prompt);
prompt.setText(" Enter the number");
final EditText input = (EditText) findViewById(R.id.enterAnswer);
input.setVisibility(View.VISIBLE);
input.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
Editable answer = input.getText();
int finalAnswer = Integer.parseInt(String.valueOf(answer));
int finalLoadG1 = Integer.parseInt(String.valueOf(loadG1));
input.setVisibility(View.GONE);
prompt.setVisibility(View.GONE);
if (finalAnswer == finalLoadG1) {
score[0]++;
}
return true;
default:
}
}
return false;
}
});
}
}.start();
};
});
}
}
已解决
我在分数[0]++之后加上以下内容:
number.setVisibility(View.VISIBLE);
final int loadG1 = generateG1.nextInt(1000000) + 10000;
number.setText(" " + loadG1);
input.getText().clear();
start();
这样,所有必要的更改都已完成,计时器重新开始计时。我还修改了 prompt TextView 的可见性,以确保它仅在用户能够输入答案时出现。花了我一段时间,但这已经解决了。