Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 延长倒计时时间_Java_Android_Countdowntimer - Fatal编程技术网

Java 延长倒计时时间

Java 延长倒计时时间,java,android,countdowntimer,Java,Android,Countdowntimer,为什么这个代码不起作用 这段代码应该将倒计时时间延长到10秒(每次当点为20、40、60时),等等。但是当我开始计时,并且我的分数为20时,它会在文本视图中显示正确的时间值。但是它在1秒后消失,倒计时时间得到旧值并继续。有人知道吗 int bonus_time = 1 , sec = 10000 , point == 0; points_timer =new CountDownTimer(sec,1000) { @Override public void o

为什么这个代码不起作用

这段代码应该将倒计时时间延长到10秒(每次当点为20、40、60时),等等。但是当我开始计时,并且我的分数为20时,它会在文本视图中显示正确的时间值。但是它在1秒后消失,倒计时时间得到旧值并继续。有人知道吗

int bonus_time = 1 , sec = 10000 , point == 0; 

points_timer =new CountDownTimer(sec,1000) {

        @Override
        public void onTick(long millisUntilFinished) 
        {
                    if ( point == (bonus_time * 20))
                    {
                       ++bonus_time;
                       millisUntilFinished += 10000;
                       sec += 10000;
                    }

        ++point;
        }

        @Override
        public void onFinish() 
        {
          bonus_time = 1;
        }
    };

没有办法扩展倒计时,类中没有方法提供此功能

你试图给
sec
增加时间是没有用的,我甚至想知道它是如何编译的。无论如何,在Java中,整数是按值传递的,所以一旦传递了
1000
,就传递了它,并且不能更改该值

唯一有效的方法是重新创建一个新的计时器,并使用它来代替旧的计时器。或者重新编码所有内容,一个您自己可以扩展的计时器。

public void onTick(long millisUntilFinished) 
是吗

millisUntilFinished += 10000;

当您使用
sec
变量为其时间创建计时器时,不能将参数赋值给primitive,并期望它更改该方法之外的任何内容(例如,millisUntilFinished的范围是onTick方法,仅此而已)

,它不会神奇地将两者连接起来,因此当
sec
的值更改计时器的时间时,它只会在您创建计时器时使用
sec
的值一次

更改
millisuntiltfinished
也是一样,它是从回调中获得的一个参数,通过更改它的值,您没有做任何事情

更改计时器时间的唯一方法是创建一个新计时器。我的建议是:

// GLOBAL VARIABLES
CountDownTimer points_timer;
int bonus_time = 1 , sec = 10000 , point == 0; 

public void createTimer()
{
    points_timer =new CountDownTimer(sec,1000) {

        @Override
        public void onTick(long millisUntilFinished) 
        {
            sec = millisUntilFinished;

            if ( point == (bonus_time * 20))
            {
                ++bonus_time;
                //millisUntilFinished += 10000;
                sec += 10000;
                createTimer();
            }

            ++point;
        }

        @Override
        public void onFinish() 
        {
            bonus_time = 1;
        }
    };
}
计时器的创建由一个函数包围,并且每次获得奖金以使用新值
sec
重新创建计时器时,都会调用该函数

  • 您还应该调用该方法一次,以代替以前的代码,从而最初创建计时器

希望这能奏效。

谢谢!非常有用,这不会泄漏onTick回调,所以现在它每秒被调用两次?