2011-03-31 18 views
9

Aşağıdaki kod var: Android'de farklı bir yöntemde oluşturulan tost nasıl iptal edilir?

private Toast movieRecordToast; 

    private void displayNextMovie() { 
     if (movieRecordToast != null) movieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often) 
     movieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT); 
     movieRecordToast.show(); 

    private void displayPrevMovie() { 
     if (movieRecordToast != null) movieRecordToast.cancel(); 
     movieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT); 
     movieRecordToast.show();   

Ama displayNextMovie eğer

birkaç kez hızla denir ve daha sonra displayPrevMovie, denir "İleri" Tost hala gösterilir ve "Önceki" görüntülenir sonra. İptalin düzgün çalışmadığı anlaşılıyor.

+0

Post. aynı hakkında başka sorulara bakarak - android gibi görünüyor sadece iptal etmeyin Çok hızlı bir şekilde tost ... –

+1

Bir kenara göre, neden tek bir fonksiyona sahip değilsiniz "özel void displayMovieToast (String s)" ya alır "Prev "veya" İleri "bir argüman olarak mı? – rajath

cevap

28

yerine yeni Toast Nesnenin yeni bir metin kolayca tek Toast nesneye üzerinde tutabilir görüntülenen istediğiniz her zaman yaratma ve istediğiniz zaman geçerli Toast'u iptal edin. Sonraki Toast görüntülenmeden önce Toast.setText() işlevini kullanarak metni değiştirebilirsiniz.

örnek kod:

private Toast mToastText; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Create the object once. 
    mToastText = Toast.makeText(this, "", Toast.LENGTH_SHORT); 
} 

private void displayText(final String message) { 
    mToastText.cancel(); 
    mToastText.setText(message); 
    mToastText.show(); 
} 
+3

Çözümünüzü beğendim ama şimdi tost'larım görünmüyor. Herhangi bir fikir? :? – AlvaroSantisteban

+4

Benim durumumda, mToastText.cancel(), tostun görüntülenmediğini gösterdi. Onsuz mükemmel çalışır. :) – AlvaroSantisteban

+0

Benim için mükemmel çalışıyor, teşekkürler. Bu yaş için bana bugging oldu! – jason

0

Kullanıcıya sonraki/prev bilgilerini görüntülemenin birçok yolu vardır. Tostları tamamen ortadan kaldırırdım ve , bir sonraki/önceki filmin adıyla bir TextView metnini güncelleştirir. Bu sizin probleminizi ortadan kaldırır ve IMHO daha iyi kullanıcı arayüzü sağlar. Tasarım gereksinimleri tost bildirimleri için sormak yoksa

Ancak, deneyin:

private Toast nextMovieRecordToast; 
private Toast prevMovieRecordToast; 


private void displayNextMovie() { 
    if (prevMovieRecordToast != null) prevMovieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often) 
    nextMovieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT); 
    nextMovieRecordToast.show();} 

private void displayPrevMovie() { 
    if (nextMovieRecordToast != null) nextMovieRecordToast.cancel(); 
    prevMovieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT); 
    prevMovieRecordToast.show(); }  
+0

Teşekkürler, @OceanBlue. Ancak, displayNextMovie birden çok kez çağrılırsa yaklaşım işe yaramayacağını düşünüyorum - "Sonraki" mesajların bir sırası olacak –

+0

Eh, sanırım ne istediğinize bağlı. Kullanıcı "Prev" tostunu görecek. Arkasındaki "Sonraki" tostların kendileri zaman aşımına uğrayacak. Yani bu kodu çalıştırırsanız, etki sizin istediğiniz gibi olmalıdır. Ancak ... bunun için tost kullanman gerektiğine emin misin? – OceanBlue

0

wroclai çözümü mükemmel! Bununla birlikte, uzun mesaj tost formuna girerken Tost'u vidalar ve bir tanesini de tersine çevirir. Önceki nesneyi kullanmak yerine bunu düzeltmek için yeniden oluşturun. Bunun yerine bu hattın:
mToastText.setText(message);
yazma bu bir: myToast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
animasyonlar da daha iyi görünüyor :)

İlgili konular