在Android中如何防止Toast重复提醒的问题呢?
Android Toast是一个消息提醒组件,它只会弹出一段信息,告诉用户某某事情已经发生了,过一段时间后就会自动消失。它完全不会阻挡用户的任何操作,甚至用户也可以完全不用理会Toast。
那么我们还是先来看一下Toast的基本用法吧,如下所示:
Toast.makeText(context, "things happened", Toast.LENGTH_SHORT).show();
Toast有三个参数,第一个参数是context上下文,第二个参数是弹出的文本,最后一个参数用于指定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(); } }
可以看到,这里和我们平时使用Toast的方式并不一样,这里会先判断Toast对象是否为空,如果是空的情况下才会调用makeText()方法来去生成一个Toast对象。
否则就直接调用setText()方法来设置显示的内容,最后再调用show()方法将Toast显示出来,由于不会每次调用的时候都生成新的Toast对象,因此刚才我们遇到的问题在这里就不会出现了。
调用的时候也很简单,只需要把Context对象和Toast要显示的内容传进来就可以了:
Util.showToast(context, "things happened");
现在我们再重新运行一遍程序,连续点击5次Toast,效果如下图所示: