Android中Toast是咱們最經常使用的一個組建, 可是通常開發的用法都是以下:java
Toast.makeText(context, text, duration).show();
這是最經常使用的, 可是, 當這個Toast顯示的時候, 另外一個Toast又來了, 那麼第二個Toast必需要等第一個Toast消失以後才能顯示, 這就有延時了, 那麼下面講的方法就是, 當第一個還沒消失的時候, 第二個當即顯示出來.android
Toast.makeText是一個靜態工廠方法,每次調用這個方法都會產生一個新的Toast對象,在這個對象上調用show方法就會使這個對象加入到消息顯示的隊列裏排隊等候顯示。實際上,若是咱們不每次都產生一個新的toast對象,而是每一次都是用同一個,那麼就不須要排隊了,咱們要的及時更新效果也就能夠實現了。app
實際上,咱們可使用Toast自己的構造器產生一個新的Toast對象,並用setText和setDuration方法來達到和makeText一樣的設置,以後也同樣用show方法來顯示。這樣就把makeText方法產生對象和設置屬性的操做分開來進行。也就是說,咱們顯示下一個toast的時候,能夠沒必要再產生新對象,只要在原來的對象上從新設置屬性,並從新show就能夠了,這樣新的toast就會代替原來的立刻顯示。ide
在實際中, 咱們把Toast放到全局環境中, 而後整個項目裏面都用這一個Toast, 這樣就確保了全部的Toast都是經過這一個view來顯示的, 下面代碼給出了一個Toast管理器的單例實現, 用一個enum就能夠了.ui
OK,分析完了, 那麼就上代碼吧.code
package com.gdut.pet.common.utils; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.widget.Toast; public enum toastMgr { builder; private View v; private Toast it; private void init(Context c) { LayoutInflater inflate =(LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = Toast.makeText(c, "", Toast.LENGTH_SHORT).getView(); it = new Toast(c); it.setView(v); } public void display(CharSequence text, int duration) { it.setText(text); it.setDuration(duration); it.show(); } public void display(int Resid, int duration) { it.setText(Resid); it.setDuration(duration); it.show(); } }
而後在application底下去初始化這個Toast對象
public class MyApplication extends Application { private static final String TAG = "application"; @Override public void onCreate() { //TODO Auto-generated method stub super.onCreate(); L.i(TAG, "oncreate"); //這樣就能夠了 在其餘activity中就可使用了 toastMgr.builder.init(getApplicationContext()); } }
這樣就能夠了 在其餘activity中就可使用了, 這樣第二個toast就會當即顯示出來了隊列