防止Toast重複提醒

許佳佳233發表於2016-08-01

原文地址:http://blog.csdn.net/guolin_blog/article/details/51336415

說到不會阻擋使用者原本正在進行的操作,這就延伸到我們今天的第二個主題,Toast。Toast只會彈出一段資訊,告訴使用者某某事情已經發生了,過一段時間後就會自動消失。它完全不會阻擋使用者的任何操作,甚至使用者也可以完全不用理會Toast。

那麼我們還是先來看一下Toast的基本用法吧,如下所示:

Toast.makeText(context, "things happened", Toast.LENGTH_SHORT).show();

最後一個引數用於指定Toast顯示的時長,Toast.LENGTH_SHORT表示顯示時間較短,Toast.LENGTH_LONG表示顯示時間較長。

不過也不是說Toast的用法就一點深度都沒有了,比如說上述的寫法就會存在如下圖所示的問題:
這裡寫圖片描述
可以看到,這裡我快速連續點選了五次按鈕,Toast就觸發了五次。這樣的體驗其實是不好的,因為也許使用者是手抖了一下多點了幾次,導致Toast就長時間關閉不掉了。又或者我們其實已在進行其他操作了,應該彈出新的Toast提示,而上一個Toast卻還沒顯示結束。

因此,最佳的做法是將Toast的呼叫封裝成一個介面,寫在一個公共的類當中,如下所示:

public class Util {

    private static Toast toast;

    public static void showToast(Context context, 
        String content) {
        if (toast == null) {
            toast = Toast.makeText(context,
                         content, 
                         Toast.LENGTH_SHORT);
        } else {
            toast.setText(content);
        }
        toast.show();
    }

}

可以看到,這裡和我們平時使用Toast的方式並不一樣,這裡會先判斷Toast物件是否為空,如果是空的情況下才會呼叫makeText()方法來去生成一個Toast物件,否則就直接呼叫setText()方法來設定顯示的內容,最後再呼叫show()方法將Toast顯示出來。由於不會每次呼叫的時候都生成新的Toast物件,因此剛才我們遇到的問題在這裡就不會出現了。

呼叫的時候也很簡單,只需要把Context物件和Toast要顯示的內容傳進來就可以了:

Util.showToast(context, "things happened");

現在我們再重新執行一遍程式,效果如下圖所示:
這裡寫圖片描述

相關文章