防止Toast重复提醒

原文地址:http://blog.csdn.net/guolin_blog/article/details/51336415

说到不会阻挡用户原本正在进行的操作,这就延伸到我们今天的第二个主题,Toast。Toast只会弹出一段信息,告诉用户某某事情已经发生了,过一段时间后就会自动消失。它完全不会阻挡用户的任何操作,甚至用户也可以完全不用理会Toast。

那么我们还是先来看一下Toast的基本用法吧,如下所示:

Toast.makeText(context, "things happened", Toast.LENGTH_SHORT).show();
  • 1

最后一个参数用于指定Toast显示的时长,Toast.LENGTH_SHORT表示显示时间较短,Toast.LENGTH_LONG表示显示时间较长。

不过也不是说Toast的用法就一点深度都没有了,比如说上述的写法就会存在如下图所示的问题: 
这里写图片描述 
可以看到,这里我快速连续点击了五次按钮,Toast就触发了五次。这样的体验其实是不好的,因为也许用户是手抖了一下多点了几次,导致Toast就长时间关闭不掉了。又或者我们其实已在进行其他操作了,应该弹出新的Toast提示,而上一个Toast却还没显示结束。

因此,最佳的做法是将Toast的调用封装成一个接口,写在一个公共的类当中,如下所示:

public class Util {

    private static Toast toast;

    public static void showToast(Context context, 
        String content) {
        if (toast == null) {
            toast = Toast.makeText(context,
                         content, 
                         Toast.LENGTH_SHORT);
        } else {
            toast.setText(content);
        }
        toast.show();
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

可以看到,这里和我们平时使用Toast的方式并不一样,这里会先判断Toast对象是否为空,如果是空的情况下才会调用makeText()方法来去生成一个Toast对象,否则就直接调用setText()方法来设置显示的内容,最后再调用show()方法将Toast显示出来。由于不会每次调用的时候都生成新的Toast对象,因此刚才我们遇到的问题在这里就不会出现了。

调用的时候也很简单,只需要把Context对象和Toast要显示的内容传进来就可以了:

Util.showToast(context, "things happened");
  • 1

现在我们再重新运行一遍程序,效果如下图所示: 
这里写图片描述

猜你喜欢

转载自blog.csdn.net/sinat_17775997/article/details/79862882