问题引入:当我们弹出toast的时候,一般会
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
可是当我们频繁点击按钮的时候,就会频繁触发上面代码。这样 toast 就会在很长的一段时间才能消亡。
解决方案:只要避免 toast 频繁创建即可。
1、我们可以加一个时间限制,比如在2s(LENGTH_SHORT)时间内,不响应事件,不重复执行代码。
2、定义一个全局 Toast的对象mToast,这样频繁点击时候,直接用同一个对象。
方法1,不要解释,不是本文重点。方法2,当你执行如下代码的时候,就会发现“没有任何现象”,toast 完全不弹出。
mToast.cancel();//取消上次
mToast.setText("new message");//设置新内容
mToast.show();// 再次呈现
但是当代码改成如下时,就可以正常弹出,而且频繁点击时只显示一个:
//mToast.cancel();
mToast.setText("new message");
mToast.show();
不管,你怎么疯狂点击,当停止以后,2s内就会消失。那么肯定心中有疑问:1、为什么全局的 mToast 可以重复使用(当其自然消失后,还可以show)?
2、为什么在show之前加上“cancel”,就不显示了呢?
深入研究:从源码层次下,逐步分析。
1、创建 toast的时候
public static Toast makeText(Context context, CharSequence text, int duration)