取消定制,比平时更长,吐司

时间:2017-09-20 18:07:40

标签: java android countdowntimer

我正在使用以下代码来显示比平时更长的吐司,并且它可以更长时间地显示想要的文本,除了时间之外,用户对普通吐司的感知没有区别。

Toast toast;
CountDownTimer mcd;

[...]

toast=Toast.makeText(getApplicationContext(), 
StaticMethods.giveStringAccordingtoLanguage(action,language), 
Toast.LENGTH_LONG);
mcd=new CountDownTimer(6000, 50)
{

   public void onTick(long millisUntilFinished) {toast.show();}
   public void onFinish() {toast.show();}

}.start();

但是当用户退出应用程序时,如果显示该自定义Toast,它会一直显示,直到时间结束。

当应用程序退出时,我尝试用这样的代码解决它:

    try
    {
        toast.cancel();
    }
    catch (Exception e)
    {
    }
    try
    {          
        mcd.cancel();
    }
    catch (Exception e)
    {
    } 

无论如何它根本不起作用。

我还试图用这样的代码重新定义刻度线的行为:

 mcd.onTick(long millisUntilFinished) {toast.cancel();}

 mcd.onFinish() {toast.cancel();}

但是这个代码甚至不正确,它看起来只有在通过new创建一个新的CountDownTimer对象时才是正确的。

关于如何解决这个问题的任何想法?在最糟糕的情况下,我可以弹出一个对话框,在退出应用程序后不会继续显示,但我更喜欢这样做,因为我认为对用户来说会更好。

2 个答案:

答案 0 :(得分:0)

如果cancel()和hide()不起作用,您应该尝试使用看起来像该活动/片段的Toast的动画来实现自定义视图。这样,视图可以随时关闭,并且只能附加到该活动/片段。

请参阅以下stackoverflow answer

我希望这有帮助!

答案 1 :(得分:0)

你说"继续展示直到它的时间结束" - 这次是正常的LENGTH_LONG时间还是6000ms的时间?如果它是LENGTH_LONG我不会打扰,因为这是Toast的正常行为。 如果你想使用LENGTH_SHORT,你可以缩短时间。

如果是6000毫秒,取消CountdownTimer有问题。你在哪里调用代码中的mcd.cancel()?在Activity#onDestroy()中?确保(通过调试)调用mcd.cancel()。

编辑:吐司累积

我猜,它可能被称为Toast累积。 Toasts不是属于您的应用的普通视图,而是创建为远程视图。所以我想,如果你调用toast.show(),它会告诉系统显示该视图,该视图会创建某种副本并显示它。一次又一次地调用show()将这些show请求排入队列,而cancel()只取消最后一次请求。

长话短说:在CountDownTimer的onTick()和onFinish()方法中,尝试在调用toast.show()之前直接调用toast.cancel()。这应该避免吐司的累积(排队) - 我希望它不会闪烁,但我怀疑它,因为淡出动画吐司正在使用。

相关问题