Toast 解決連續顯示
阿新 • • 發佈:2018-11-28
Toast 是 Android 開發最常見的元件之一,經常用 toast 來顯示一些提示資訊,但在開發中經常有這樣一個問題:連續點選某個按鈕,toast 會一直現,如果點選的次數很多,可能會有十幾秒的時間都在顯示 toast,這樣的使用者體驗就不是很好。
Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT).show();
上面的這種建立方法是最常見的一種,尤其是配合 Android Studio 外掛一起使用時更加方便快捷,只需要打幾個字母就可以建立完成。但是這樣的建立方法就會導致上述問題,那麼該如何解決呢?
進去 Toast 原始碼檢視 makeText 方法可以看到這個方法會返回一個 Toast 物件,如果我們的程式碼寫成這樣:
findViewById(R.id.tv).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "toast", Toast.LENGTH_SHORT).show();
}
});
每點選一次就會建立一個 Toast 物件,每個 Toast 物件都會顯示幾秒,這樣問題就出來了,其實到這裡就可以看出問題的根本原因是每次點選都會建立一個 Toast 物件,如果設定成只有一個 Toast 物件,不管怎麼點選都不會建立新的物件,而是隻有已經建立好的物件,這樣問題是不是就可以解決了呢,用程式碼驗證一下就知道了。
Toast toast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.tv).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (toast == null){
toast = Toast.makeText(MainActivity.this,"content ",Toast.LENGTH_SHORT);
}else {
toast.setText("content");
}
toast.show();
}
});
先定義一個 Toast 物件,在點選時判斷 toast 是否為空,如果為空則建立一個 Toast 物件,不為空就直接設定顯示資訊。這樣就可以避免每次點選都會建立 Toast 物件的問題了。
如果每次需要 Toast 的時候都這麼寫一次就太煩瑣了,所以接下來的事情就是封裝,封裝成一個 Toast 的工具類,一次封裝,到處使用,這個很程式設計師 ,嘻嘻……
public class ShowToast {
private static Toast toast;
public static void showToastOne(Context context,int content){
if (toast == null){
toast = Toast.makeText(context,content + "",Toast.LENGTH_SHORT);
}else {
toast.setText(content + "");
}
toast.show();
}
public static void showToastOne(Context context,String content){
if (toast == null){
toast = Toast.makeText(context,content + "",Toast.LENGTH_SHORT);
}else {
toast.setText(content + "");
}
toast.show();
}
}