用户体验之自定义Toast,拿过来直接用(Toast的重复显示)

来源:互联网 发布:mac 系统怎么翻墙 编辑:程序博客网 时间:2024/04/29 14:29

每点击一次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在显示, * 如果有就把显示内容替换(使用setTexttext,将想替换的文字替换即可) */
        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);

有什么更好的方法或理解错的地方,请大家指出,与大家一起进步


0 0
原创粉丝点击