最近测试部的同事,提出的bug,说Toast显示太不好了,如果频繁点击一个button,Toast会长时间的显示,而且即使切换页面,Toast消息还在显示,这样就造成了显示错乱。虽然不是什么大的bug,但是给用户的体验确实不好,所以,就在此献上博文一篇,来解决此问题,同时做个记录,防止忘记。在此,非常感谢,测试部的同事们提出的问题,你们的不满意,是我进步的动力。
下面贴出核心代码:
package com.example.acer.toastdemo;
import android.content.Context;
import android.os.Handler;
import android.widget.Toast;
/**
* 创建时间:2015/6/27 23:17
* 项目名称:ToastDemo
* 类说明:Toast工具,解决Toast重复显示,非本页面显示
* 创建人: lc
*
* @since JDK 1.7.0
* Copyright (c) lc-版权所有
*/
public class CustomToast {
/**
* the unit is ms
*/
public static final int LENGTH_LONG = 3500;
public static final int LENGTH_INT = 2000;
public static final int LENGTH_SHORT = 1000;
public static final int LENGTH_BYTE = 500;
/**Toast显示的最长时间是Toast.LENGTH_LONG*/
private static Toast mToast;
private static final Handler mHandler = new Handler();
private static final Runnable mRunnable = new Runnable() {
@Override
public void run() {
mToast.cancel();
}
};
/**
* Toast the string
*
* @param context
* @param string
* @param duration
*/
public static void makeText(Context context, String string, int duration) {
mHandler.removeCallbacks(mRunnable);
if (mToast != null) {
mToast.setText(string);
} else {
mToast = Toast.makeText(context, string, Toast.LENGTH_LONG);
}
mHandler.postDelayed(mRunnable, duration);
mToast.show();
}
/**在此提供两个makeText方法的重载,与Toast.makeText对应*/
/**
* Toast the string
*
* @param context
* @param resId
* @param duration
*/
public static voidmakeText(Context context, int resId, int duration) {
makeText(context, context.getString(resId), duration);
}
/**
*cancel Toast
*/
public static void cancel() {
if (mToast != null) {
mToast.cancel();
}
}
}
如有不妥之处,还望指正,继续修改。此demo,是android studio版本的,demo地址:http://download.csdn.net/detail/baidu_17508977/8846261