Comment simuler un clic de bouton en utilisant du code?

216

Comment puis-je déclencher un événement de clic de bouton à l'aide de code dans Android? Je veux déclencher le clic du bouton par programme lorsqu'un autre événement se produit.

Même problème auquel je fais face

public void onDateSelectedButtonClick(View v){
    /*Something  Alarm Management 
    http://www.java2s.com/Code/Android/Core-Class/Alarmdemo.htm
    copied code from this site*/
}

Code du bouton:

<Button
    android:onClick="onDateSelectedButtonClick"
    android:text="Set notification for this date" />

Mais je veux appeler cette fonction OnLoadLayout sans OnClickEvent

sam
la source
pouvez-vous préciser le problème? Pourquoi veux-tu ça? Voulez-vous déclencher l'exécution de code?
Vladimir Ivanov
oui, je veux déclencher le code à exécuter pour le clic du bouton.
sam

Réponses:

445

Il y a un meilleur moyen.

View.performClick();

http://developer.android.com/reference/android/view/View.html#performClick ()

cela devrait répondre à tous vos problèmes. chaque vue hérite de cette fonction, y compris Button, Spinner, etc.

Juste pour clarifier, View n'a pas de méthode performClick () statique. Vous devez appeler performClick () sur une instance de View. Par exemple, vous ne pouvez pas simplement appeler

View.performClick();

Au lieu de cela, faites quelque chose comme:

View myView = findViewById(R.id.myview);
myView.performClick();
clair de lune
la source
2
Mais quel est le bouton de retour de View for Android?
Peter Ajtai
4
il n'y a pas de "Affichage" pour le bouton de retour sur votre téléphone. vous devez utiliser des écouteurs clés pour obtenir ces pressions sur les boutons. c'est un tout autre problème.
moonlightcheese
3
@moon - Si vous souhaitez que les personnes soient notifiées de vos commentaires, commencez-les par "@" et les premières lettres de l'utilisateur que vous souhaitez notifier .... (les auteurs du commentaire commenté sont automatiquement notifiés, mais les commentateurs le font pas)
Peter Ajtai
14
Le code affiché dans cette réponse est un peu déroutant. Juste pour clarifier, View n'a pas de méthode performClick () statique. Vous devez appeler performClick () sur une instance de View.
Łukasz Wiklendt
3
ce n'est déroutant que si vous ne savez pas ce que vous faites.
moonlightcheese
52

Juste pour clarifier ce que Moonlightcheese a déclaré: Pour déclencher un événement de clic de bouton via le code dans Android, fournissez les éléments suivants:

buttonName.performClick();
Scott Tovey
la source
12

vous pouvez le faire de cette façon

private Button btn;
btn = (Button)findViewById(R.id.button2);
btn.performClick();
Tushar Saha
la source
7

Android callOnClick()( ajouté dans l'API 15 ) peut parfois être un meilleur choix que dans mon expérience performClick(). Si un utilisateur a activé les sons de sélection, cela performClick()pourrait amener l'utilisateur à entendre deux sons de sélection continue qui sont quelque peu superposés et qui peuvent être discordants. (Un son de sélection pour le premier clic du bouton de l'utilisateur, puis un autre pour les autres boutons OnClickListenerque vous appelez via le code.)

Charles Madere
la source
7

Écrivez simplement cette simple ligne de code: -

button.performClick();

où bouton est la variable de référence de la classe Button et défini comme suit: -

private Button buttonToday ;
buttonToday = (Button) findViewById(R.id.buttonToday);

C'est tout.

Deepak Sharma
la source
6

À partir d'API15, vous pouvez également utiliser callOnClick()cette fonction pour appeler directement la vue jointe OnClickListener. Contrairement à performClick (), cela appelle uniquement l'écouteur et n'effectue aucune action de clic associée, comme signaler un événement d'accessibilité.

Collatéral
la source
4

Si vous n'utilisez pas l' senderargument, pourquoi ne pas refactoriser l'implémentation du gestionnaire de boutons pour séparer la fonction, et l'appeler de l'endroit où vous le souhaitez (à partir du gestionnaire de boutons et de l'autre endroit).

Quoi qu'il en soit, c'est une conception meilleure et plus propre - un code qui doit être appelé sur le gestionnaire de boutons ET de certains autres endroits mérite d'être refactorisé pour fonctionner. De plus, il vous aidera à séparer la gestion de l'interface utilisateur du code logique d'application. Vous aurez également un joli nom pour la fonction, pas seulement onDateSelectedButtonClick ().

d.popov
la source