Je veux utiliser le même bouton pour effectuer 2 méthodes différentes. Une méthode lorsque l’utilisateur clique dessus et une seconde méthode (différente) lorsque l’utilisateur clique dessus.
Je l’utilise pour le clic simple (qui fonctionne très bien):
Button downSelected = (Button) findViewById(R.id.downSelected); downSelected.setOnClickListener(new OnClickListener() { public void onClick(View v) { method(); } } });
J’ai essayé d’append un longClickListener mais cela n’a pas fonctionné.
Appréciez les idées sur la façon de résoudre ce problème.
Merci!
Je l’ai déjà fait, j’ai juste utilisé:
down.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { // TODO Auto-generated method stub return true; } });
Par documentation:
public void setOnLongClickListener (View.OnLongClickListener l)
Depuis: API Niveau 1 Enregistrez un rappel à appeler lorsque vous cliquez sur cette vue et que vous la maintenez enfoncée. Si cette vue n’est pas longtemps cliquable, elle devient cliquable longtemps.
Notez que cela nécessite de renvoyer un booléen, cela devrait fonctionner.
Pour que les deux fonctions fonctionnent pour une image cliquable qui répondra à la fois aux clics courts et longs, j’ai essayé ce qui suit qui semble fonctionner parfaitement:
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; } });
// Alors les fonctions appelées:
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(); }
Il semble que le moyen facile de déclarer l’élément en XML comme pouvant être cliqué, puis de définir une fonction à appeler sur le clic ne s’applique qu’aux clics courts – vous devez avoir un auditeur pour différencier les clics courts et longs.
Au début, lorsque j’ai implémenté un longClick et un clic pour effectuer deux événements distincts, le problème que je rencontrais était que lorsque j’avais un clic long, l’application exécutait également l’action à effectuer pour un simple clic. La solution a été de changer le type de retour du longClick en true, ce qui est normalement faux par défaut. Changez-le et cela fonctionne parfaitement.
Essayez d’utiliser un écouteur ontouch au lieu d’un clicklistener.
http://developer.android.com/reference/android/view/View.OnTouchListener.html