2012-12-17 33 views
5

Trong Android, nếu người dùng nhấn một nút nhiều lần thực sự nhanh chóng, sự kiện onClick được kích hoạt nhiều lần .. loại đó có ý nghĩa.Làm cách nào để tránh kích hoạt nhiều lần sự kiện onClick khi người dùng nhấn nút nhiều lần thực sự nhanh chóng?

Nếu phương pháp onClick bắt đầu Activity mới, người dùng có thể mở cùng một Activity nhiều lần và mỗi trường hợp của Activity sẽ được xếp chồng lên trên ngăn xếp.

Tôi thường tắt nút bên trong phương pháp onClick (được liên kết với nút) và bật lại một vài giây sau khi sử dụng HandlerpostDelay.

Tôi không thực sự thích làm theo cách này sao cho có cách tiếp cận vấn đề này một cách sạch sẽ hơn?

+0

ebable/vô hiệu hóa nút có vẻ tốt với tôi – Blackbelt

Trả lời

0

cách sạch:

Sau khi bạn nhấp vào nút, nếu điều bạn muốn gọi là null, gọi nó, nếu không, không.

1

Trong trường hợp hoạt động bạn cũng có thể vượt qua một bổ sung cho Ý định của bạn:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

hoặc

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

để tránh nhiều khởi động.

Cách khác là có boolean giả trong khi bạn đang quản lý nhấp chuột ngăn nhiều nhấp chuột.

CẬP NHẬT với ví dụ:

boolean processingClick = false; 
Button b = new Button(); 
b.setOnClickListener(new View.OnClickListener() { 
    @Override public void onClick(View v) { 
     if (!processingClick) { 
      processingClick = true; 

      //your code here 

      processingClick = false; 
     } 
    } 
}); 
+2

FLAG_ACTIVITY_CLEAR_TOP có thể sẽ hoạt động kết hợp với FLAG_ACTIVITY_SINGLE_TOP .. nếu không hoạt động sẽ được tạo lại với mỗi sự kiện onclick. Cách tiếp cận boolean giả hoạt động hoàn hảo, mặc dù tôi đã mong đợi một số loại điều khiển từ API Android. –

+0

Vâng, tôi cũng thế. Tôi nghĩ rằng vấn đề ở đây là sự chậm trễ nhỏ trong phương thức startActivity, nhưng tôi không biết có điều gì đó mà nền tảng có thể thực hiện hay không. – Aballano

+0

ai đó có thể xin vui lòng giải thích về cách phương pháp boolean giả sẽ đạt được? bất kỳ mã ví dụ nào? cổ vũ. – user280109

0

Thực hiện một phương pháp cho tất cả các nút trong Actitivty:

public void enableButtons(boolean doit){ 
    bXXX.setClickable(doit); 
    ... 
    ... 
} 

Nếu sử dụng "thực hiện OnClickListener"

@Override 
public void onClick(View view) { 
    enableButtons(false); 
    switch (view.getId()) { 
     case R.id.xxx: 
      doWhatYouWant(); 
      break; 
     ... 
     ... 
    } 
} 

OnResume kích hoạt của bạn Các nút một lần nữa ...

@Override 
protected void onResume() { 
    super.onResume(); 
    enableButtons(true); 
} 
Các vấn đề liên quan