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就会当即显示出来了队列