Android之Toast简单实现不循环提示

本文介绍了解决Android应用中Toast频繁弹出的问题。通过提供两种方法:一是自定义MyToast类,二是使用单例模式控制Toast显示,确保即使快速连续点击按钮也不会导致Toast重复弹出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看过这篇文章才发现以前自己把Toast用烂了。

转载地址:http://blog.youkuaiyun.com/way_ping_li/article/details/8840955

不知道各位程序猿们在项目中有没有遇到这个问题:点击一个view弹出一个Toast,我们用的方法是Toast.makeText(context, "提示", Toast.LENGTH_SHORT).show(); 但是,细心的人发现了,如果频繁的点击这个view,会发现尽管我们退出了这个应用,还是会一直弹出提示,这显然是有点点小尴尬和恼人的。下面就给大家提供两种方式解决这个问题。

1.封装了一个小小的Toast:

[java]  view plain copy
  1. /** 
  2.  * 不循环提示的Toast 
  3.  * @author way 
  4.  * 
  5.  */  
  6. public class MyToast {  
  7.     Context mContext;  
  8.     Toast mToast;  
  9.   
  10.     public MyToast(Context context) {  
  11.         mContext = context;  
  12.   
  13.         mToast = Toast.makeText(context, "", Toast.LENGTH_SHORT);  
  14.         mToast.setGravity(170, -30);//居中显示  
  15.     }  
  16.   
  17.     public void show(int resId, int duration) {  
  18.         show(mContext.getText(resId), duration);  
  19.     }  
  20.   
  21.     public void show(CharSequence s, int duration) {  
  22.         mToast.setDuration(duration);  
  23.         mToast.setText(s);  
  24.         mToast.show();  
  25.     }  
  26.   
  27.     public void cancel() {  
  28.         mToast.cancel();  
  29.     }  
  30. }  

2.两个直接调用的函数函数:可以放在在Activity中,在需要时直接调用showToast(String or int); 在Activity的onPause()中调用hideToast(),使得应用退出时,取消掉恼人的Toast。

[java]  view plain copy
  1. /** 
  2.  * Show a toast on the screen with the given message. If a toast is already 
  3.  * being displayed, the message is replaced and timer is restarted. 
  4.  *  
  5.  * @param message 
  6.  *            Text to display in the toast. 
  7.  */  
  8. private Toast toast;  
  9. private void showToast(CharSequence message) {  
  10.     if (null == toast) {  
  11.         toast = Toast.makeText(this, message,  
  12.                 Toast.LENGTH_LONG);  
  13.         toast.setGravity(Gravity.CENTER, 00);  
  14.     } else {  
  15.         toast.setText(message);  
  16.     }  
  17.    
  18.     toast.show();  
  19. }  
  20.    
  21. /** Hide the toast, if any. */  
  22. private void hideToast() {  
  23.     if (null != toast) {  
  24.         toast.cancel();  
  25.     }  
  26. }  
补充说明:以下代码是我从上面博文作者的项目中找到的,比上面的好用。

/**
 * Toast统一管理类
 * 
 * @author way
 * 
 */
public class T {
	// Toast
	private static Toast toast;

	/**
	 * 短时间显示Toast
	 * 
	 * @param context
	 * @param message
	 */
	public static void showShort(Context context, CharSequence message) {
		if (null == toast) {
			toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
			// toast.setGravity(Gravity.CENTER, 0, 0);
		} else {
			toast.setText(message);
		}
		toast.show();
	}

	/**
	 * 短时间显示Toast
	 * 
	 * @param context
	 * @param message
	 */
	public static void showShort(Context context, int message) {
		if (null == toast) {
			toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
			// toast.setGravity(Gravity.CENTER, 0, 0);
		} else {
			toast.setText(message);
		}
		toast.show();
	}

	/**
	 * 长时间显示Toast
	 * 
	 * @param context
	 * @param message
	 */
	public static void showLong(Context context, CharSequence message) {
		if (null == toast) {
			toast = Toast.makeText(context, message, Toast.LENGTH_LONG);
			// toast.setGravity(Gravity.CENTER, 0, 0);
		} else {
			toast.setText(message);
		}
		toast.show();
	}

	/**
	 * 长时间显示Toast
	 * 
	 * @param context
	 * @param message
	 */
	public static void showLong(Context context, int message) {
		if (null == toast) {
			toast = Toast.makeText(context, message, Toast.LENGTH_LONG);
			// toast.setGravity(Gravity.CENTER, 0, 0);
		} else {
			toast.setText(message);
		}
		toast.show();
	}

	/**
	 * 自定义显示Toast时间
	 * 
	 * @param context
	 * @param message
	 * @param duration
	 */
	public static void show(Context context, CharSequence message, int duration) {
		if (null == toast) {
			toast = Toast.makeText(context, message, duration);
			// toast.setGravity(Gravity.CENTER, 0, 0);
		} else {
			toast.setText(message);
		}
		toast.show();
	}

	/**
	 * 自定义显示Toast时间
	 * 
	 * @param context
	 * @param message
	 * @param duration
	 */
	public static void show(Context context, int message, int duration) {
		if (null == toast) {
			toast = Toast.makeText(context, message, duration);
			// toast.setGravity(Gravity.CENTER, 0, 0);
		} else {
			toast.setText(message);
		}
		toast.show();
	}

	/** Hide the toast, if any. */
	public static void hideToast() {
		if (null != toast) {
			toast.cancel();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值