Gestionnaire d'événement dans une classe distincte de l'activité principale
Cet exemple utilise comme gestionnaire d'événement une classe distincte de l'activité principale. Il y aura donc deux fichiers sources : celui de l'activité et celui du gestionnaire de clics. L'avantage de cette approche est que le gestionnaire est "faiblement couplé" à l'activité principale. Résidant dans un fichier séparé, il pourrait très bien être utilisé dans un autre projet.
MainActivity.java
package net.codeandroid.couleur1;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
// Affiche une couleur aléatoire lorsque l'on clique sur un bouton (utilisation
// d'une classe externe 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(mCouleur, mZoneCouleur));
}
}
PeintreMagique.java
package net.codeandroid.couleur1;
import android.view.View;
import java.util.Random;
// Gère le clic sur une bouton.
public class PeintreMagique implements View.OnClickListener {
// tableau des couleurs disponibles
private int mCouleur[];
// vue à colorer
private View mZoneCouleur;
// constructeur
public PeintreMagique(int couleur[], View zoneCouleur) {
mCouleur = couleur;
mZoneCouleur = zoneCouleur;
}
// 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 1</string>
<string name="label_bouton">Couleur magique</string>
</resources>