it-swarm-eu.dev

Android: clic long sur un bouton -> effectuer des actions

Je veux utiliser le même bouton pour effectuer 2 méthodes différentes. Une méthode lorsqu'un utilisateur clique dessus et une seconde (différente) lorsque l'utilisateur LONG clique dessus.

J'utilise ceci pour le seul clic court (ce 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'ajouter un longClickListener mais cela n'a pas fonctionné.

Appréciez toutes les idées sur la façon de résoudre ce problème.

Merci!

55
Lior Iluz

Je l'ai déjà fait auparavant, je viens d'utiliser:

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 cette vue est cliquée et maintenue. Si cette vue n'est pas cliquable longtemps, elle devient cliquable longtemps.

Notez qu'il faut renvoyer un booléen, cela devrait fonctionner.

109
blindstuff

Pour que les deux fonctions fonctionnent avec une image cliquable répondant aux clics courts et longs, j'ai essayé les solutions suivantes qui semblent parfaitement fonctionner:

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

// Ensuite, 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 cliquable, puis de définir une fonction à appeler au clic ne s'applique qu'aux clics courts. Vous devez disposer d'un écouteur pour différencier les clics courts et longs.

17
mklopfer

Initialement, lorsque j’ai mis en place un clic longClick pour effectuer deux événements distincts, le problème que j’avais à faire était que lorsqu’il avait un clic long, l’application effectuait également l’action à effectuer pour un simple clic. La solution que j’ai réalisée consistait à changer le type de retour du longClick en true, ce qui est normalement faux par défaut. Changez-le et cela fonctionne parfaitement.

16
Saiesh