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>