无延时显示Toast的方法

    Android中Toast是我们最常用的一个组建, 但是一般开发的用法都是如下:

 Toast.makeText(context, text, duration).show();

    这是最常用的, 但是, 当这个Toast显示的时候, 另一个Toast又来了, 那么第二个Toast必须要等第一个Toast消失之后才能显示, 这就有延时了, 那么下面讲的方法就是, 当第一个还没消失的时候, 第二个立即显示出来.

    Toast.makeText是一个静态工厂方法,每次调用这个方法都会产生一个新的Toast对象,在这个对象上调用show方法就会使这个对象加入到消息显示的队列里排队等候显示。实际上,如果我们不每次都产生一个新的toast对象,而是每一次都是用同一个,那么就不需要排队了,我们要的及时更新效果也就可以实现了。

  实际上,我们可以使用Toast本身的构造器产生一个新的Toast对象,并用setText和setDuration方法来达到和makeText同样的设置,之后也一样用show方法来显示。这样就把makeText方法产生对象和设置属性的操作分开来进行。也就是说,我们显示下一个toast的时候,可以不必再产生新对象,只要在原来的对象上重新设置属性,并重新show就可以了,这样新的toast就会代替原来的马上显示。

    在实际中, 我们把Toast放到全局环境中,  然后整个项目里面都用这一个Toast, 这样就确保了所有的Toast都是通过这一个view来显示的, 下面代码给出了一个Toast管理器的单例实现, 用一个enum就可以了.

    OK,分析完了, 那么就上代码吧.

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

    

转载于:https://my.oschina.net/u/1377657/blog/346440

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值