無延時顯示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就會當即顯示出來了隊列

相關文章
相關標籤/搜索