自定义Toast取消不起作用

时间:2011-03-22 12:06:30

标签: android android-layout toast

我见过很多关于取消吐司的问题。他们都没有工作。

我有一个自定义Toast。该代码只有一行与http://developer.android.com/guide/topics/ui/notifiers/toasts.html#CustomToastView

相同

区别如下。

  1. toast变量定义为类变量
  2. 整个java代码都是用方法编写的。
  3. 在这个方法的开头,我添加了以下行来取消吐司。

    if (toast!=null){
        toast.cancel();
    }
    
  4. 当用户选择(onClick)视图/布局时,将调用该方法。问题是当用户选择几次时,toast将排队(toast.cancel不起作用)。

    任何解决方案?

    [更新] 我尝试将toast对象设为静态变量。还是不行。

4 个答案:

答案 0 :(得分:7)

我遇到了同样的问题(自定义吐司排队)并找到了解决方案。在我的情况下,它运作良好。

拥有自定义Toast对象initially set to null

  • 如果为null,则使用“new”创建新的自定义Toast对象。

  • 就您在同一活动中而言,不要“新”来创建新对象。相反,使用该对象。由于setText()在这种情况下不起作用,因此请使用setView(),就像使用自定义吐司一样。

  • 这样show(), cancel(), show(), cancel()就像我期望的那样工作。没有延迟,没有排队。

希望这有帮助。

答案 1 :(得分:2)

最后,我创建了一个自定义对话框,以阻止用户做任何其他操作(并避免弹出多个toast)。添加了一个onClick侦听器事件,以便在用户单击该对话框时关闭该对话框。

很遗憾Toast.cancel()不起作用。

答案 2 :(得分:0)

上面的代码toast.setDuration(Toast.LENGTH_LONG);中的

你使用toast.setDuration(Toast.LENGTH_SHORT); 或者特定时间。自动取消。我们无法取消它

答案 3 :(得分:-1)

将此代码用于自定义文本:

LayoutInflater mInflater=LayoutInflater.from(context);
View view=mInflater.inflate(R.layout.tost_layout,null);
Toast toast=new Toast(this);
toast.setView(view);
toast.show();