gpt4 book ai didi

java - 用户输入和计时器(java android应用程序)

转载 作者:行者123 更新时间:2023-12-01 13:37:52 25 4
gpt4 key购买 nike

所以我想制作一个像秒表一样的计时器,但我完全是个菜鸟。我尝试“组合”来自Here的东西和 Here .

目标是接受用户输入他们想要设置计时器的时间,然后当时间到了时它就会开始工作。

这是我到目前为止所拥有的:

package com.example.timer;

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
private CountDownTimer countDownTimer;
private boolean timerHasStarted = false;
public TextView text;
private final long interval = 1 * 1000;
EditText editTime1;
Button startButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTime1 = (EditText)findViewById(R.id.editTime1);
startButton = (Button)findViewById(R.id.startButton);
text = (TextView) this.findViewById(R.id.timer);
startButton.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
//get the name from edittext and storing into string variable
long timeVal = Long.parseLong(editTime1.getText().toString());
countDownTimer = new MyCountDownTimer(timeVal, interval);
text.setText(text.getText() + String.valueOf(timeVal / 1000));

if (!timerHasStarted) {
countDownTimer.start();
timerHasStarted = true;
startButton.setText("STOP");
} else {
countDownTimer.cancel();
timerHasStarted = false;
startButton.setText("RESTART");
}
}
class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long timeVal, long interval) {
super(timeVal, interval);
}

@Override
public void onTick(long millisUntilFinished) {
text.setText("" + millisUntilFinished / 1000);
}
@Override
public void onFinish() {
text.setText("Times up");
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

最佳答案

有几点需要注意。

  1. Activity 预计开始时间以毫秒为单位。如果输入的值大于 1000(例如 10 秒,即 10000),应用程序会显示倒计时。

  2. 以下两行放置不正确。

    countDownTimer = new MyCountDownTimer(timeVal, interval);
    text.setText(text.getText() + String.valueOf(timeVal / 1000));

    它们应该仅在倒计时开始时执行。但在给定的实现中,它们在启动和停止时都运行。

因此,当倒计时停止时,会创建一个新的 MyCountDownTimer,并且 countDownTimer.cancel();在这个新对象而不是原始对象中调用。所以倒计时仍在继续。

由于 setText 在开始和停止时都执行,因此 timeVal 会附加到输出中。这导致观察到“Times up0”。

更新后的onClick方法如下。

    public void onClick(View v) {
// get the name from edittext and storing into string variable
long timeVal = Long.parseLong(editTime1.getText().toString());

if (!timerHasStarted) {
countDownTimer = new MyCountDownTimer(timeVal, interval);
text.setText(text.getText() + String.valueOf(timeVal / 1000));
countDownTimer.start();
timerHasStarted = true;
startButton.setText("STOP");
} else {
countDownTimer.cancel();
timerHasStarted = false;
startButton.setText("RESTART");
}
}

关于java - 用户输入和计时器(java android应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21128310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com