2010-12-09 11 views
42

Ich möchte den gleichen Knopf verwenden, um 2 verschiedene Methoden durchzuführen. Eine Methode, wenn der Benutzer sie einmal anklickt und eine zweite (andere) Methode, wenn der Benutzer LONG darauf klickt.Android: langer Klick auf eine Schaltfläche -> Aktionen ausführen

Ich benutze dies für den einzigen kurzen Klick (die großen Werke):

Button downSelected = (Button) findViewById(R.id.downSelected); 
     downSelected.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       method(); 
       } 
      } 

     }); 

Ich habe versucht, eine longClickListener hinzufügen, aber es hat nicht funktioniert.

Schätzen Sie alle Ideen, wie Sie das lösen können.

Danke!

+1

sollten Sie Ihren vollständigen Code, was Sie mit dem OnLongClickListener – schwiz

Antwort

85

Ich habe es vorher getan, ich habe gerade verwendet:

down.setOnLongClickListener(new OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      // TODO Auto-generated method stub 
      return true; 
     } 
    }); 

Pro Dokumentation:

public void setOnLongClickListener (View.OnLongClickListener l)

Seit: API Level 1 Registrieren Sie einen Rückruf aufgerufen werden, wenn diese Ansicht angeklickt und gehalten wird. Wenn diese Ansicht nicht lange klickbar ist, wird sie anklickbar.

Beachten Sie, dass es erforderlich ist, einen Booleschen Wert zurückzugeben, dies sollte funktionieren.

+0

Vielen Dank! Ich muss es falsch eingepflanzt haben, als ich es versuchte. der lange Klick funktioniert, aber es führt immer noch die Kurz-Klick-Methode, irgendwelche Ideen? –

+0

Sie meinen, es tut beides oder ruft nur die kurze Methode? Welche Version von Android ist das? – blindstuff

+0

es tut beides: \ auf Android 2.2 –

-2

Versuchen Sie es mit einem Otouch-Listener anstelle eines Clicklisteners.

http://developer.android.com/reference/android/view/View.OnTouchListener.html

+1

für den langen Klick oder für beide versucht haben? –

+0

Diese Antwort ist nicht beschreibend genug, um nützlich zu sein. Wie würden Sie vorschlagen, dass der onTouchListener zum Erkennen von langen Klicks verwendet wird? –

+0

Ich stimme Simon zu - allerdings; Sie könnten die Zeit zwischen MotionEvent.DOWN und MotionEvent.UP berechnen – else

10

Anfangs, als ich ein longClick und einen Klick implementiert habe, um zwei separate Ereignisse durchzuführen, war das Problem, dass ich bei einem Longclick die Aktion ausführte, die für einen einfachen Klick ausgeführt wurde. Die Lösung, die ich erkannte, war, den Rückgabetyp von longClick in true zu ändern, was normalerweise standardmäßig falsch ist. Ändere es und es funktioniert perfekt.

+1

Vielen Dank. Das hat den Trick gemacht. – user427969

13

Um beide Funktionen arbeiten für einen klickbaren Bild, das sowohl auf kurze und lange Klicks reagieren, ich folgendes versucht, die perfekt zu funktionieren scheint:

:

image = (ImageView) findViewById(R.id.imageViewCompass); 
    image.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      shortclick(); 
     } 
    }); 

    image.setOnLongClickListener(new View.OnLongClickListener() { 
    public boolean onLongClick(View v) { 
     longclick(); 
     return true; 
    } 
}); 

// Dann werden die Funktionen, die aufgerufen werden

public void shortclick() 
{ 
Toast.makeText(this, "Why did you do that? That hurts!!!", Toast.LENGTH_LONG).show(); 

} 

public void longclick() 
{ 
Toast.makeText(this, "Why did you do that? That REALLY hurts!!!", Toast.LENGTH_LONG).show(); 

} 

Es scheint, dass der einfache Weg, das Produkt in der XML als anklickbare deklarieren und dann definieren eine Funktion auf dem Klick aufrufen gilt nur für kurze Klicks - Sie einen Zuhörer zwischen kurzen und langen Klicks zu unterscheiden haben.

Verwandte Themen