无延时显示Toast的方法

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

相关文章
相关标签/搜索