【问题标题】:How can i Reset my Timer value meanwhile completion of timer?如何在定时器完成的同时重置我的定时器值?
【发布时间】:2014-05-12 06:04:19
【问题描述】:

我试图在创建活动时启动一个计时器,如果按下相同的按钮,我可以将计时器从零重置,但每次我按下启动设置间隔的按钮时,它似乎正在创建一个新的间隔和不重置已经创建的那个。有人可以帮忙吗?这是我的代码

timer = (TextView) findViewById(R.id.timer_value);

Count = new CountDownTimer(time, 1000) {

        public void onTick(long millisUntilFinished) {

            timer.setText("Time Left: " + millisUntilFinished / 1000);
        }

        public void onFinish() {
            timer.setText("OUT OF TIME!");
            if (time < 10000) {
                time = 10000;
            }
            AlertDialog.Builder builder = new AlertDialog.Builder(
                    TicTacToe.this);
            builder.setMessage("You are Out of Time").setPositiveButton(
                    "Replay", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // reset the game environment.

                            Count.onFinish();
                            // Count.cancel();
                            Count.start();
                            new_game(player_name_1);
                        }
                    });
            AlertDialog alert = builder.create();
            alert.show();

        }
    }.start();

【问题讨论】:

    标签: java android timer counter countdown


    【解决方案1】:

    你可以使用计时器

    //in global
    Timer myTimer
    
    
    /**
    * its kills runnable
    */
    public void stopTimer(){
    //handler.removeCallbacks(null); //it resets all timer which handler holds
    myTimer.cancel();
    }
    
    public void setTimer(int time){//give it 5 for 5 secs
    final Runnable Update = new Runnable() {
    
            public void run() {
                //do sth
            }
        };
    
        myTimer = new Timer();
        myTimerTimer.schedule(new TimerTask() {
    
            @Override
            public void run() {
                handler.post(Update);
            }
        }, 1000, time*1000);
    }
    

    【讨论】:

    • 但是我有一个指定的 countDownTimer 时间,我该如何实现它以及我的问题是如何在计时器完成和重置计时器值之间停止和重置计时器值。你现在能帮我吗@alp
    【解决方案2】:

    如果您想重新启动计时器,请删除 Count.onFinish();

    更新:
    我用一个新线程替换了 AlertDialog,这是适用于我的模拟器的代码

    public class MainActivity extends Activity
    {
        int time = 10000;
        CountDownTimer Count;
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            final TextView timer = (TextView) findViewById(R.id.timer);
    
            Count = new CountDownTimer(time, 1000) {
    
                public void onTick(long millisUntilFinished) {
    
                    timer.setText("Time Left: " + millisUntilFinished / 1000);
                }
    
                public void onFinish() {
                    timer.setText("OUT OF TIME!");
                    if (time < 10000) {
                        time = 100000;
                    }
                }
            }.start();
        }
        public void buttonClicked(View view)
        {
            Log.i("Timer", "Resetting timer");
            Count.cancel();
            Count.start();
        }
    
    }
    

    【讨论】:

    • 但它无法生成具有不同值的新计时器,我已将其删除但它无法正常工作
    • 让我检查一下,我会告诉你的
    • 但是@helleye 正如我所问的那样,我想在计时器完成之前使用按钮单击从零重新启动它。请考虑一下并感谢您的帮助,但“您为我提供的解决方案”不是我的问题
    • “从零开始”是什么意思?如果它开始像 10, 9, 8.. 这样开始倒计时,而此时如果您按下按钮将其设置为 0 并停止计数,或者?
    • "restart it from zero" 表示定义的值,对我来说是 10
    猜你喜欢
    • 2021-05-23
    • 2020-09-12
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多