Gestionnaire d'événement dans une classe interne nommée
Cet exemple intégre le gestionnaire d'événements à l'activité principale en déplaçant la classe PeintreMagique (voir exemple précédent) à l'intérieur de la classe MainActivity. L'avantage de cette approche est que, en faisant du gestionnaire une classe interne à la classe principale, la première a directement accès à toutes les variables membres de la deuxième (remarquez comment la classe PeintreMagique n'a plus besoin de constructeur pour recevoir des paramètres).
MainActivity.java
package net.codeandroid.couleur2;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.util.Random;
// Affiche une couleur aléatoire lorsque l'on clique sur un bouton (utilisation
// d'une classe interne nommée comme gestionnaire d'événement).
public class MainActivity extends AppCompatActivity {
// zone d'affichage de la couleur
private View mZoneCouleur;
// couleurs disponibles
private int[] mCouleur = {
Color.BLACK, Color.BLUE, Color.CYAN, Color.DKGRAY,
Color.GRAY, Color.GREEN, Color.LTGRAY, Color.MAGENTA,
Color.RED, Color.WHITE, Color.YELLOW};
// point d'entrée de l'application
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// chargement de la mise en page
setContentView(R.layout.activity_main);
// récupération des composants depuis le fichier de mise en page
mZoneCouleur = findViewById(R.id.zone_couleur);
Button bouton = (Button) findViewById(R.id.bouton);
// assignation du gestionnaire de clic (classe externe)
bouton.setOnClickListener(new PeintreMagique());
}
// Gère le clic sur une bouton.
class PeintreMagique implements View.OnClickListener {
// gestionnaire d'événement
@Override
public void onClick(View vue) {
// choisit aléatoirement une couleur
Random generator = new Random();
int index = generator.nextInt(mCouleur.length);
// change la couleur d'arrière-plan de la vue
mZoneCouleur.setBackgroundColor(mCouleur[index]);
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/bouton"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="@string/label_bouton"/>
<TextView
android:id="@+id/zone_couleur"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
</LinearLayout>
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Couleur 2</string>
<string name="label_bouton">Couleur magique</string>
</resources>