CountDownTimer 不会被重置
CountDownTimer won't be reset
我正在创建一个简单的应用程序,用户将在其中测试他的 math.The 两个数字的结果显示在四个数字之一中 button.User 是猜测结果并添加到 score.He 有30 秒做尽可能多的正确 answers.After 30 秒的分数会随着再次播放而弹出 button.The 问题是如果他再次按下播放按钮,计时器不会重置 ??
我的代码:
public class MainActivity extends AppCompatActivity {
private Button dugme1;
private Button dugme2;
private Button dugme3;
private Button dugme4;
private Button startDugme;
private List<Integer> list = new ArrayList<>();
private int lokacijaTacnogOdgovora;
private TextView zadatak;
private TextView krajnjiRezultat;
private TextView tajmer;
private int vrednostKliknuyogPolja;
private int tacanOdgovor;
private int brojPokusaja;
private int brojPogodnjenihOdgovora;
private Random random = new Random();
CountDownTimer countDownTimer;
private long preostaloVreme = 30000;
private LinearLayout linearLayout;
private TextView rezultat;
Button dugmeZaPonovi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//pronadjeni odgovarajuci Button
dugme1 = findViewById(R.id.dugme);
dugme2 = findViewById(R.id.dugme2);
dugme3 = findViewById(R.id.dugme3);
dugme4 = findViewById(R.id.dugme4);
startDugme = findViewById(R.id.start_dugme);
linearLayout = findViewById(R.id.linerni_lejaut);
dugmeZaPonovi = findViewById(R.id.dugme_za_nastavak);
//Pronadjeni odgovarujci TextView
zadatak = findViewById(R.id.sabiranje_text_view);
krajnjiRezultat = findViewById(R.id.krajnji_rezultat);
tajmer = findViewById(R.id.tajmer_text_view);
rezultat = findViewById(R.id.rezultat);
linearLayout.setVisibility(View.INVISIBLE);
linearLayout.setBackgroundColor(0xFF00FF00);
linearLayout.setPadding(10,10,10,10);
ispisivanjeDugmeta();
}
private void startovanjeTajmera() {
countDownTimer = new CountDownTimer(preostaloVreme, 1000) {
@Override
public void onTick(long millisUntilFinished) {
preostaloVreme = millisUntilFinished;
updateTajmer();
}
@Override
public void onFinish() {
linearLayout.setVisibility(View.VISIBLE);
rezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
startDugme(findViewById(R.id.start_dugme));
}
}.start();
}
public void ispisivanjeDugmeta() {
//saboranje dva broja i prikazivanje rezultata u odgovarajuci textview
int prviBroj = random.nextInt(21);
int drugiBroj = random.nextInt(21);
tacanOdgovor = prviBroj + drugiBroj;
zadatak.setText(prviBroj + " + " + drugiBroj);
krajnjiRezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
//prikazivanje random brojeva i postavljanje tacnog rezultata na odgovarujce mesto
lokacijaTacnogOdgovora = random.nextInt(4);
int netacanOdgovor = 0;
for (int i = 0; i < 4; i++) {
if (i == lokacijaTacnogOdgovora) {
list.add(tacanOdgovor);
} else {
netacanOdgovor = random.nextInt(41);
while (netacanOdgovor == (tacanOdgovor)) {
netacanOdgovor = random.nextInt(41);
}
list.add(netacanOdgovor);
}
}
//prikazivanje nekih vrednosti ali i tacnog rezultata na dugmad
dugme1.setText(Integer.toString(list.get(0)));
dugme2.setText(Integer.toString(list.get(1)));
dugme3.setText(Integer.toString(list.get(2)));
dugme4.setText(Integer.toString(list.get(3)));
list.clear();
updateTajmer();
}
public void kliknuto(View view) {
Button btn = (Button) view;
String kliknutoPolje = " ";
kliknutoPolje = btn.getText().toString();
vrednostKliknuyogPolja = Integer.parseInt(kliknutoPolje);
if (vrednostKliknuyogPolja == tacanOdgovor) {
brojPogodnjenihOdgovora++;
brojPokusaja++;
krajnjiRezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
} else {
brojPokusaja++;
krajnjiRezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
}
ispisivanjeDugmeta();
}
public void startDugme(View view) {
startovanjeTajmera();
startDugme.setVisibility(View.INVISIBLE);
}
private void updateTajmer() {
int sekunde = (int) preostaloVreme % 60000 / 1000;
String preostaloVreme = "";
if (sekunde < 10) {
preostaloVreme += "0";
}
preostaloVreme += "" + sekunde;
tajmer.setText(preostaloVreme + " s");
}
public void igrajPonovo(View view) {
brojPokusaja = 0;
brojPogodnjenihOdgovora = 0;
startovanjeTajmera();
krajnjiRezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
linearLayout.setVisibility(View.INVISIBLE);
}
}
当您想启动新计时器时,您没有将 preostaloVreme
属性 重置回 30000。将您的 startovanjeTajmera
函数更改为如下内容:
private void startovanjeTajmera() {
preostaloVreme = 30000;
countDownTimer = new CountDownTimer(preostaloVreme, 1000) {
...
}
我正在创建一个简单的应用程序,用户将在其中测试他的 math.The 两个数字的结果显示在四个数字之一中 button.User 是猜测结果并添加到 score.He 有30 秒做尽可能多的正确 answers.After 30 秒的分数会随着再次播放而弹出 button.The 问题是如果他再次按下播放按钮,计时器不会重置 ??
我的代码:
public class MainActivity extends AppCompatActivity {
private Button dugme1;
private Button dugme2;
private Button dugme3;
private Button dugme4;
private Button startDugme;
private List<Integer> list = new ArrayList<>();
private int lokacijaTacnogOdgovora;
private TextView zadatak;
private TextView krajnjiRezultat;
private TextView tajmer;
private int vrednostKliknuyogPolja;
private int tacanOdgovor;
private int brojPokusaja;
private int brojPogodnjenihOdgovora;
private Random random = new Random();
CountDownTimer countDownTimer;
private long preostaloVreme = 30000;
private LinearLayout linearLayout;
private TextView rezultat;
Button dugmeZaPonovi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//pronadjeni odgovarajuci Button
dugme1 = findViewById(R.id.dugme);
dugme2 = findViewById(R.id.dugme2);
dugme3 = findViewById(R.id.dugme3);
dugme4 = findViewById(R.id.dugme4);
startDugme = findViewById(R.id.start_dugme);
linearLayout = findViewById(R.id.linerni_lejaut);
dugmeZaPonovi = findViewById(R.id.dugme_za_nastavak);
//Pronadjeni odgovarujci TextView
zadatak = findViewById(R.id.sabiranje_text_view);
krajnjiRezultat = findViewById(R.id.krajnji_rezultat);
tajmer = findViewById(R.id.tajmer_text_view);
rezultat = findViewById(R.id.rezultat);
linearLayout.setVisibility(View.INVISIBLE);
linearLayout.setBackgroundColor(0xFF00FF00);
linearLayout.setPadding(10,10,10,10);
ispisivanjeDugmeta();
}
private void startovanjeTajmera() {
countDownTimer = new CountDownTimer(preostaloVreme, 1000) {
@Override
public void onTick(long millisUntilFinished) {
preostaloVreme = millisUntilFinished;
updateTajmer();
}
@Override
public void onFinish() {
linearLayout.setVisibility(View.VISIBLE);
rezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
startDugme(findViewById(R.id.start_dugme));
}
}.start();
}
public void ispisivanjeDugmeta() {
//saboranje dva broja i prikazivanje rezultata u odgovarajuci textview
int prviBroj = random.nextInt(21);
int drugiBroj = random.nextInt(21);
tacanOdgovor = prviBroj + drugiBroj;
zadatak.setText(prviBroj + " + " + drugiBroj);
krajnjiRezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
//prikazivanje random brojeva i postavljanje tacnog rezultata na odgovarujce mesto
lokacijaTacnogOdgovora = random.nextInt(4);
int netacanOdgovor = 0;
for (int i = 0; i < 4; i++) {
if (i == lokacijaTacnogOdgovora) {
list.add(tacanOdgovor);
} else {
netacanOdgovor = random.nextInt(41);
while (netacanOdgovor == (tacanOdgovor)) {
netacanOdgovor = random.nextInt(41);
}
list.add(netacanOdgovor);
}
}
//prikazivanje nekih vrednosti ali i tacnog rezultata na dugmad
dugme1.setText(Integer.toString(list.get(0)));
dugme2.setText(Integer.toString(list.get(1)));
dugme3.setText(Integer.toString(list.get(2)));
dugme4.setText(Integer.toString(list.get(3)));
list.clear();
updateTajmer();
}
public void kliknuto(View view) {
Button btn = (Button) view;
String kliknutoPolje = " ";
kliknutoPolje = btn.getText().toString();
vrednostKliknuyogPolja = Integer.parseInt(kliknutoPolje);
if (vrednostKliknuyogPolja == tacanOdgovor) {
brojPogodnjenihOdgovora++;
brojPokusaja++;
krajnjiRezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
} else {
brojPokusaja++;
krajnjiRezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
}
ispisivanjeDugmeta();
}
public void startDugme(View view) {
startovanjeTajmera();
startDugme.setVisibility(View.INVISIBLE);
}
private void updateTajmer() {
int sekunde = (int) preostaloVreme % 60000 / 1000;
String preostaloVreme = "";
if (sekunde < 10) {
preostaloVreme += "0";
}
preostaloVreme += "" + sekunde;
tajmer.setText(preostaloVreme + " s");
}
public void igrajPonovo(View view) {
brojPokusaja = 0;
brojPogodnjenihOdgovora = 0;
startovanjeTajmera();
krajnjiRezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
linearLayout.setVisibility(View.INVISIBLE);
}
}
当您想启动新计时器时,您没有将 preostaloVreme
属性 重置回 30000。将您的 startovanjeTajmera
函数更改为如下内容:
private void startovanjeTajmera() {
preostaloVreme = 30000;
countDownTimer = new CountDownTimer(preostaloVreme, 1000) {
...
}