每点击一次Toast按钮,会把点击按钮的消息加入Toast队列(先进先出),如果用户同一时间点击多次,会依次显示Toast队列的消息(退出应用也会显示),严重影响用户体验。
解决方法:
public class ORToast { private static Toast toast; private static Handler handler = new Handler(); private static Runnable r = new Runnable() { public void run() { toast.cancel(); } }; public static void showToast(Context Context, String text, int duration) { handler.removeCallbacks(r);//调用showToast时把之前队列的Toast消息移除
/** * 多次弹框的时候重复cancel()和show()调用效率有些低, * 于是我么借鉴单例模式的思想,每个Toast在显示的时候都会去判断当前有没有Toast在显示, * 如果有就把显示内容替换(使用setText(text),将想替换的文字替换即可) */
if (toast != null) toast.setText(text); else toast = Toast.makeText(Context, text,duration); handler.postDelayed(r, duration);//延迟duration毫秒,防止多次调用后出现太久再消失 toast.show(); } public static void showToast(Context Context, int resId, int duration) { showToast(Context, Context.getResources().getString(resId), duration); } }在代码中只需要
ORToast.showToast(getBaseContext(), "Text", 1000);
有什么更好的方法或理解错的地方,请大家指出,与大家一起进步