java - Android 增加倒计时器

标签 java android timer increment countdowntimer

有关于 CountDownTimer 的问题。我必须制作一个应用程序,允许用户每次单击按钮时将时间时间增加 +1。然后,在停止单击按钮后,它会等待三秒钟,然后开始倒计时。

我将代码粘贴在下面。

我的问题是:我似乎无法使数字递增正常工作,但是似乎在我停止递增数字(onStop())后,它直接转到(onFinish())。而不是转到 OnTick() 并每秒将数字减 1。我尝试了多种方法来解决这个问题,但都被卡住了。

任何人都可以引导我朝着正确的方向前进吗?任何帮助,将不胜感激。谢谢大家!

public class MainActivity extends Activity {

    Button incrementTime, startTime;
    public TextView timedisplay;
    public myTimer wavetimer;
    private long millisInFuture;
    private long millisUntilFinished;
    private long countDownInterval;
    private long onclicktime;
    //private WaveInterface model;
    public int countdown;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);     
    incrementTime = (Button) findViewById(R.id.button2);
    startTime = (Button) findViewById(R.id.button3);
    incrementTime.setText("Increment Time");
    startTime.setText("Start");
    timedisplay = (TextView) findViewById(R.id.mycounter);
    timedisplay.setText("Time Left: " + millisUntilFinished);
    wavetimer = new myTimer (millisInFuture, 1000);


    incrementTime.setOnClickListener(new OnClickListener(){
    int countdown = 01;
   /**
    * On click button Listner
 * @return 
    */
    public void onClick(View v) {
        millisInFuture++;
        return; 
    }

   });
    startTime.setOnClickListener(new OnClickListener(){
    public void onClick(View v) {
        wavetimer.start();
    }
});}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}


public class myTimer extends CountDownTimer  {
public long millisInFuture;
private long countDownInterval;


public myTimer(long millisInFuture, long countDownInterval) {
    super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
    millisUntilFinished--;
    if (millisUntilFinished == 0){
        wavetimer.onFinish();
    }
    else {
    timedisplay.setText("Time Left: " + millisUntilFinished / 1000);
    }

}
@Override
public void onFinish() {
    timedisplay.setText("Countdown Finished");
    wavetimer.cancel();
}


public void onStop() {
    millisInFuture = millisInFuture + 1;
    timedisplay.setText("Time Left: " + millisInFuture);
}

我似乎不知道如何正确地增加数字。我尝试了多种方法,但总是出错。不知道该去哪里寻找。任何帮助,将不胜感激。谢谢大家!

最佳答案

你应该知道,在倒计时类中,当时间到了时,你不必手动调用 onFinish ,也不必在 onFinish 中取消导致其他或手动减少任何内容。尝试以下操作,看看它是否适合您想要的任务。希望您能注意到,我没有看到实用的理由来查看按钮是否“不再被单击”。

public class MainActivity extends Activity {

    Button incrementTime, startTime;
    public TextView timedisplay;
    long millisInFuture = 1000;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        incrementTime = (Button) findViewById(R.id.button2);
        startTime = (Button) findViewById(R.id.button3);
        timedisplay = (TextView) findViewById(R.id.mycounter);

        resetText();

        incrementTime.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                millisInFuture += 1000;
                resetText();
            }
        });

        startTime.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                CountDownTimer wavetimer = new myTimer(millisInFuture + 3000, 1000).start();
                // ^ add 3 seconds.
            }
        });}

    protected void resetText() {
        timedisplay.setText("Time Left: " + millisInFuture / 1000);
    }

    public class myTimer extends CountDownTimer  {

        private long millisActual;

        public myTimer(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
            millisActual = millisInFuture - 3000;
        }

        @Override
        public void onTick(long millisUntilFinished) {
            //v start showing the tick after 3 seconds.
            if (millisUntilFinished <= millisActual) {
                timedisplay.setText("Time Left: " + millisUntilFinished / 1000);                
            }
        }

        @Override
        public void onFinish() {
            timedisplay.setText("Countdown Finished");
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

关于java - Android 增加倒计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13478471/

相关文章:

java:自动更新 HashMap

c - 如何在 Windows 上用 C 实现定时器

javascript - 获取与 setTimeout 或 setInterval 关联的函数

java - log4j.xml 本地构建的优先级

Java命令行指定系统属性文件

java - 如何将泛型类型传递给泛型方法?

android - Mysql、sqlite 和 blob 数据,什么是好的做法?

android - 向数据库中添加记录,程序出错

android - WorkManager 2.5.0 多进程 - 工作未在指定进程中运行

java - 将无符号类型写入 Netty ChannelBuffer