2013-09-07 18 views
6

Android'de, Tost oluşturduğumda ve gösterdiğimde, onlar ardışık olarak görünür. Sorun şu ki, bazı alanları kontrol eden bir düğme var ve eğer kullanıcı yanlış veri girerse, bir Tost gösteriliyor. Kullanıcı düğmeye sürekli olarak dokunursa, tostlar biriktirilir ve mesaj birkaç saniyeliğine kaybolmaz.En iyi yolu önlemek için Android Tost birikimi

Bundan kaçınmanın en iyi yolu hangisidir?

  • Referansı son Tost'a kaydedebilir ve yeni bir tane yapmadan önce onu kaldırabilir miyim?
  • Tüm iletiler için aynı Tostu kullanmalı mıyım?
  • Yeni bir uygulama oluşturup göstermeden önce tüm Uygulama Tostlarını temizleyen herhangi bir yöntem kullanabilir miyim?
+0

Aynı sorunu yaşıyorum, size çalışmayan birkaç fikir paylaşıyorum, tost finali yapmak, koşulları da kullanarak, sayaçları kullanarak ..: \ şimdi bu soruyu izleyeceğim. –

+2

Hola (Merhaba) Didac, bunu denediniz mi (http://stackoverflow.com/questions/12922516/how-to-prevent-multiple-toast-overlaps) veya [that] (http://stackoverflow.com/questions/6496725/gösteren-çoklu-toast-aynı zamanda zaman problemi)? – AlexBcn

+0

En iyi yol, Tostları kullanmamak. :) – kcoppock

cevap

25

Bir Tostu kapatmak için Toastcancel() yöntemini kullanabilirsiniz.

Gösterdiğiniz her Tost'a bir başvuru tutmak için bir değişken kullanın ve başka birini göstermeden önce cancel() numaralı telefonu arayın.

private Toast mToast = null; // <-- keep this in your Activity or even in a custom Application class 

//... show one Toast 
if (mToast != null) mToast.cancel(); 
mToast = Toast.makeText(context, text, duration); 
mToast.show(); 

//... show another Toast 
if (mToast != null) mToast.cancel(); 
mToast = Toast.makeText(context, text, duration); 
mToast.show(); 

// and so on. 

Hatta öylesine gibi küçük bir sınıfın içine sarabilirdiniz:

public class SingleToast { 

    private static Toast mToast; 

    public static void show(Context context, String text, int duration) { 
     if (mToast != null) mToast.cancel(); 
     mToast = Toast.makeText(context, text, duration); 
     mToast.show(); 
    } 
} 

ve şöyle kodunuzda kullanabilirsiniz:

SingleToast.show(this, "Hello World", Toast.LENGTH_LONG); 

//

+1

olabilir "SingleToast" çözümü çalışıyor, ancak bir bellek sorunu var. Bu, "bağlam" ın ömrünü aşabilecek "mToast" ömrü boyunca "bağlam" ı korur. Bellek sızıntısından kaçınmak için 'context.getApplicationContext()' kullanılmalıdır. –

1

sadece var Bu aktivitede bir tost. henüz Toast bir tane oluşturmadan önce gösterilen varsa

private Toast toast = null; 

Sonra sadece kontrol edin.

if (toast == null || !toast.getView().isShown()) { 
    if (toast != null) { 
     toast.cancel(); 
    } 
    toast = Toast.makeToast("Your text", Toast.LENGTH).show(); 
} 

Hatta farklı metin mesajları görüntülemek için gerekiyorsa kod refactor özel yöntemle showToast(text) içine geçen pasajı yapabilirsiniz.