Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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 android中的计时器_Java_Android_Xml - Fatal编程技术网

Java android中的计时器

Java android中的计时器,java,android,xml,Java,Android,Xml,我正在尝试制作一个简单的倒计时计时器,在祝酒词中显示剩余的时间。 我写了这段代码: new CountDownTimer(10000, 1000) { public void onTick(long timeRemaining) { Toast.makeText(getBaseContext(), "" + timeRemaining / 1000, Toast

我正在尝试制作一个简单的倒计时计时器,在祝酒词中显示剩余的时间。
我写了这段代码:

new CountDownTimer(10000, 1000) {

    public void onTick(long timeRemaining) {
        Toast.makeText(getBaseContext(), "" + timeRemaining / 1000, 
                                                      Toast.LENGTH_SHORT).show();
    }

    public void onFinish() {
        // do something
    }

}.start();
问题是onFinish方法中的操作是在toast中显示“3”时执行的。
因此,祝酒会比计时器慢。

我怎么解决这个问题呢?

吐司不应该这样使用Toast.LENGTH\U SHORT在消失之前将保持3秒,但计时器将每秒滴答一次,所以显然Toast很慢

如果您想向用户显示计时器,则必须使用文本视图,如果您想要自己的计时器,则可以使用
Log.d()

更新:-经过一点搜索后,我发现您不能为自定义时间设置Toast。Toast只有两个值Toast.LENGTH_LONG和Toast.LENGTH_SHORT。看看这个问题。作为一种变通方法,如果你真的想让烤面包只放一秒钟,那么你可以这样做

final Toast toast = Toast.makeText(ctx, "This message will disappear in 1 second", Toast.LENGTH_SHORT);
        toast.show();

        Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
               @Override
               public void run() {
                   toast.cancel(); 
               }
        }, 1000);

如果Android操作系统队列快速连续出现,它们会举杯庆祝。因此,实际的滴答声和烤面包片消失之间有一个缓慢的延迟。这意味着对于许多滴答声来说,祝酒开始落后。一个简单的解决办法是减少敬酒的次数

onFinish->toast.cancel()


我建议您使用textview来显示剩余时间,而不是toast。我需要使用toast。如果您试图向用户显示倒计时,则toast会产生令人不快的用户体验。例如,您可以使用对话框或DialogFragment来代替它。@GiovanniMariotti看到了我更新的答案。您不能设置toast的持续时间,使其与计时器同步?您可以使用1000来代替toast。LENGTH\u Shorth计时器在最短时间内总是更快toast@GiovanniMariotti给你一些参考资料,请投票选出对你有帮助的答案。
  
  final Toast showToast = Toast.makeText(this, "test ya!!! i'm Strtoint", Toast.LENGTH_LONG); 

     // Set the countdown 
     CountDownTimer toastCountDown = new CountDownTimer(10000, 1000) //if set 1sec ->1000 ms
     {
            public void onTick(long timeRemaining) {
              showToast.show();
            }
            public void onFinish() {
              showtoast.cancel();
            }
     };

      // Show the toast and starts the countdown
      showToast.show();
      toastCountDown.start();
     }