2013-09-07 31 views
6

Trong Android, khi tôi tạo Bánh mì nướng và hiển thị chúng, chúng xuất hiện liên tục. Vấn đề là tôi có một nút kiểm tra một số lĩnh vực và nếu người dùng nhập dữ liệu không chính xác, một Toast được hiển thị. Nếu người dùng chạm vào nút nhiều lần, Toasts được tích lũy và thông báo sẽ không biến mất trong vài giây.Cách tốt nhất để tránh tích lũy bánh mì nướng trong Android

Cách nào tốt nhất để tránh điều đó?

  • Tôi có thể lưu tham chiếu đến Bánh mì nướng cuối cùng và xóa nó trước khi tạo một cái mới không?
  • Tôi có nên sử dụng cùng một Bánh mì nướng cho tất cả các tin nhắn không?
  • Tôi có thể sử dụng bất kỳ phương pháp nào xóa tất cả các Ứng dụng trước khi tạo và hiển thị biểu tượng mới không?
+0

tôi có cùng một vấn đề, tôi chia sẻ cho bạn vài ý tưởng chưa hoạt động, làm cho bánh mì nướng cuối cùng, sử dụng nếu điều kiện, sử dụng quầy ..: \ i sẽ xem câu hỏi này ngay bây giờ. –

+2

Hola (Xin chào) Didac, bạn đã thử [this] (http://stackoverflow.com/questions/12922516/how-to-prevent-multiple-toast-overlaps) hay [that] (http://stackoverflow.com/question/6496725/show-multiple-toast-at-the-same-time-problem)? – AlexBcn

+0

Cách tốt nhất là không sử dụng Bánh mì nướng. :) có thể – kcoppock

Trả lời

25

Bạn có thể sử dụng phương thức cancel()Toast để đóng hiển thị Bánh mì nướng.

Sử dụng biến để giữ tham chiếu đến mọi Bánh mì nướng khi bạn hiển thị và chỉ cần gọi cancel() trước khi hiển thị một số khác.

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. 

Bạn thậm chí có thể quấn đó vào một lớp học nhỏ như vậy:

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(); 
    } 
} 

và sử dụng nó trong mã của bạn như sau:

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

//

+1

Giải pháp 'SingleToast' hoạt động, nhưng nó có vấn đề về bộ nhớ. Nó giữ lại 'ngữ cảnh' trong suốt thời gian' mToast' có thể vượt quá tuổi thọ của 'context'. Bạn nên sử dụng 'context.getApplicationContext()' để tránh rò rỉ bộ nhớ. –

1

Có chỉ một Bánh mì nướng trong hoạt động này.

private Toast toast = null; 

Sau đó, chỉ cần kiểm tra xem hiện có Toast được hiển thị trước khi tạo một số khác không.

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

Bạn thậm chí có thể làm cho đoạn mã cuối cùng đó thành phương thức riêng tư showToast(text) thành mã refactor nếu bạn cần hiển thị các tin nhắn văn bản khác nhau.

Các vấn đề liên quan