重写Android Toast框

序:在某些情况下,重复快速的点击可以触发Toast的控件,可以看到Toast会一直显示,直到你点击出来的Toast全部按序显示完毕后才会消失。因为这个现象已经有两个厂家提出这个问题了,一个厂家第一次提出的时候,当时刚刚接触到android,遇到这种问题本能的回避了。这次又有一个厂家提出了这个问题,自己也想趁着这次产品改版进行修改。

下面是从其他地方copy过来的,具体是否可以,等我将代码更新到自己的项目中,经过测试后再做验证,先在此做个记录

就是定义一个全局的成员变量Toast, 这个Toast不为null的时候才去make,否则直接setText.
为了按返回键后立即使Toast不再显示,重写父类Activity的onBackPressed()方法里面去cancel你的Toast即可

直接上代码:

   
 
   
  1. private Toast mToast; 
  2.     public void showToast(String text) {   
  3.         if(mToast == null) {   
  4.             mToast = Toast.makeText(MobileSendTopicActivity.this, text, Toast.LENGTH_SHORT);   
  5.         } else {   
  6.             mToast.setText(text);     
  7.             mToast.setDuration(Toast.LENGTH_SHORT);   
  8.         }   
  9.         mToast.show();   
  10.     }   
  11.        
  12.     public void cancelToast() {   
  13.             if (mToast != null) {   
  14.                 mToast.cancel();   
  15.             }   
  16.         }   
  17.        
  18.     public void onBackPressed() {   
  19.             cancelToast();   
  20.             super.onBackPressed();   
  21.         }  

 


 下面的方法,可能更适合我现在的需求吧

  1. public static void toast(String sToast, int duration) { 
  2.         if (System.currentTimeMillis() - mLastTime < 4000) { 
  3.             if (sToast.equals(mLastStr)) { 
  4.                 return; 
  5.             } 
  6.         } 
  7.          
  8.         mLastStr = sToast; 
  9.         mLastTime = System.currentTimeMillis(); 
  10.         if (mStarted) { 
  11.             Message msg = mServiceHandler.obtainMessage(EVENT_TOAST); 
  12.             msg.obj = sToast; 
  13.             msg.arg1 = duration; 
  14.             mServiceHandler.sendMessage(msg); 
  15.         } 
  16.         else { 
  17.             Context context = OwlApp.getApplication(); 
  18.             Intent intent = new Intent(context, ToastService.class); 
  19.             intent.putExtra("toastString", sToast); 
  20.             intent.putExtra("duration", duration); 
  21.             context.startService(intent); 
  22.         } 
  23.     }

 

你可能感兴趣的:(重写Android Toast框)