2012-12-17 11 views
5

W Android, jeśli użytkownik naciśnie przycisk kilka razy naprawdę szybko, zdarzenie onClick jest uruchamiane wiele razy ... co ma sens.Jak można uniknąć wielokrotnego strzelania zdarzeniem onClick, gdy użytkownik naciśnie przycisk więcej niż raz, naprawdę szybko?

Jeśli metoda onClick rozpoczyna nowy Activity, użytkownik może otworzyć te same Activity wiele razy i za każdym wystąpienie Activity zostaną ułożone na wierzchu stosu.

Zazwyczaj wyłączam przycisk w metodzie onClick (powiązany z przyciskiem) i włączam go ponownie po kilku sekundach przy użyciu Handler i postDelay.

Naprawdę nie lubię robić tego w ten sposób, więc czy istnieje inny sposób podejścia do tego problemu w bardziej czysty sposób?

+0

ebable/wyłączyć przycisk wydaje się dobre dla mnie – Blackbelt

Odpowiedz

0

czysty sposób:

Po kliknięciu przycisku, jeśli rzeczą, którą chcesz wywołać to null, powołać go, w przeciwnym razie nie.

1

W przypadku Działania można również przekazać dodatkowe dla Intencyjny:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

lub

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

aby uniknąć wielokrotnych starty.

Innym sposobem jest uzyskanie dummy boolowskiej podczas zarządzania klikaniem, które zapobiega wielokrotnym kliknięciom.

UPDATE z przykładu:

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 prawdopodobnie będzie działać w połączeniu z FLAG_ACTIVITY_SINGLE_TOP .. inaczej aktywność jest ponownie tworzony z każdego zdarzenia onclick. Fałszywe podejście boolowskie działa idealnie, chociaż spodziewałem się pewnego rodzaju kontroli z interfejsu API Androida. –

+0

Tak, ja też. Myślę, że problemem jest małe opóźnienie w metodzie startActivity, ale nie wiem, czy jest coś, co platforma mogłaby zrobić. – Aballano

+0

Czy ktoś mógłby się zastanowić, w jaki sposób można uzyskać metodę fikcji Boolean? dowolny przykładowy kod? Twoje zdrowie. – user280109

0

Dodać metodę dla wszystkich przycisków w Actitivty:

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

przypadku korzystania z "wdrożyć OnClickListener"

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

OnResume aktywować Przyciski ponownie ...

@Override 
protected void onResume() { 
    super.onResume(); 
    enableButtons(true); 
} 
Powiązane problemy