Exemples de code Android

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>