Dans ce chapitre, nous allons voir comment interagir avec l'utilisateur et répondre à ses différentes actions.
Les deux actions les plus importantes à implémenter sont les suivantes :
Vérifier la saisie du nom de l'utilisateur.
Détecter le clic sur le bouton pour démarrer le jeu.
Vérifiez la saisie de l’utilisateur
Il faut s'assurer que l'utilisateur ait saisi son prénom avant d'aller plus loin. Pour l'empêcher d'aller plus loin, la façon la plus simple consiste à désactiver le bouton de démarrage de jeu au lancement de l'application, puis de l'activer lorsqu'il a saisi son prénom. Tout d'abord, ajoutez la ligne suivante dans la méthode onCreate() :
mPlayButton.setEnabled(false);
Elle permet de désactiver le bouton de l'interface. Assurez-vous d'ajouter cette ligne après l’initialisation de la variable mPlayButton, sinon vous appellerez la méthode setEnabled() sur un objet non défini, ce qui va naturellement faire planter l'application.
Ensuite, il faut pouvoir être notifié lorsque l'utilisateur commence à saisir du texte dans le champ EditText correspondant. Pour ce faire, nous allons appeler la méthode addTextChangedListener() sur l'instance d'EditText, en utilisant une implémentation d'interface sous forme de classe anonyme.
Voici le code que vous allez ajouter dans onCreate(), à la suite du code existant :
mNameEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
// This is where we'll check the user input
}
});
Afin de vous éviter de tout taper, Android Studio vous proposera des suggestions lorsque vous commencerez à taper addText... vous pourrez alors appuyer sur la touche de tabulation ou Entrée pour compléter automatiquement.
D'autre part, lorsque vous commencerez à saisir ce qu'il y a après entre les parenthèses, arrêtez-vous après avoir tapé le T de TextWatcher : Android Studio va gentiment vous proposer d'implémenter automatiquement l'interface associée. Appuyez sur Tabulation ou Entrée et là, miracle !

La méthode qui va nous intéresser est celle à la fin : afterTextChanged.
À chaque fois que l'utilisateur saisira une lettre, la méthode afterTextChanged sera appelée. Cela nous permettra de déterminer si l'utilisateur a commencé à saisir son prénom, et ainsi activer le bouton de démarrage de jeu. La logique à appliquer est donc simple : si au moins une lettre a été saisie, alors le bouton doit être actif (bon, je suis d'accord avec vous, un prénom d'une seule lettre, c'est assez rare. Sauf pour Q dans James Bond, mais je ne vous garantis pas qu'il utilisera l'application).
Ajoutez simplement la ligne suivante, et cela fera parfaitement l'affaire :
mPlayButton.setEnabled(!s.toString().isEmpty());
Détectez le clic sur le bouton
Une fois le bouton activé, l'utilisateur peut cliquer dessus pour lancer le jeu (nous verrons cela dans la partie suivante). Pour détecter que l'utilisateur a cliqué sur le bouton, il est nécessaire d'implémenter un listener. Le principe est identique à la gestion de la saisie présentée au-dessus. Il faut pour cela appeler la méthode setOnClickListener() sur l'objet mPlayButton, puis implémenter l'interface OnClickListener de la méthode View, comme ceci :
PlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// The user just clicked
}
});
La méthode onClick() est appelée chaque fois que l'utilisateur appuie sur le bouton. C'est l'endroit idéal pour démarrer le jeu, ce que nous verrons dans les chapitres suivants.
En résumé
Il est possible de gérer les attributs des Widgets dans l’Activity pour les dynamiser suite à une action utilisateur.
Pour détecter que l'utilisateur a cliqué sur le bouton, il est nécessaire d'implémenter un View.OnClickListener.
La méthode à utiliser pour détecter un changement de texte dans une EditText est afterTextChanged().
Vous savez maintenant comment gérer les actions utilisateurs. Prochaine étape ? Lancer l'application sur un émulateur ou un équipement réel.