Exemples de code Android

Un seul gestionnaire d'événement pour plusieurs boutons

Cet exemple montre comment il est possible d'utiliser un seul gestionnaire d'événement pour plusieurs boutons. La première version de la méthode onClick() identifie le bouton à l'origine de l'événement par l'identificateur qui lui a été attribué dans le fichier de mise en page (android:id), tandis que la seconde version se base directement sur le texte écrit sur le bouton (android:text).

Échangez les noms des deux méthodes "onClick" pour les essayer.

MainActivity.java

package net.codeandroid.boutons;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn1 = (Button)findViewById(R.id.btn_pizza);
        Button btn2 = (Button)findViewById(R.id.btn_frites);
        Button btn3 = (Button)findViewById(R.id.btn_sauce);

        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
    }

    private void afficherMessage(String texte) {
        String message = "Je veux " + texte + "!";
        Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
    }

    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_pizza:
                afficherMessage("de la pizza");
                break;
            case R.id.btn_frites:
                afficherMessage("des frites");
                break;
            case R.id.btn_sauce:
                afficherMessage("de la sauce");
                break;
        }
    }

    public void onClick2(View v) {
        // le paramètre étant une instance de View, il faut le transtyper si on
        // veut accéder aux méthodes de la classe Button comme getText()
        Button btn = (Button)v;

        // getText() retourne une intance de CharSequence
        switch (btn.getText().toString()) {
            case "Pizza":
                afficherMessage("de la pizza");
                break;
            case "Frites":
                afficherMessage("des frites");
                break;
            case "Sauce":
                afficherMessage("de la sauce");
                break;
        }
    }
}

activity_main.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp"
    android:gravity="center_horizontal"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_pizza"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="@string/label_pizza" />

    <Button
        android:id="@+id/btn_frites"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="@string/label_frites" />

    <Button
        android:id="@+id/btn_sauce"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="@string/label_sauce" />

</LinearLayout>

strings.xml

<resources>
    <string name="app_name">J\'ai faim!</string>

    <string name="label_pizza">Pizza</string>
    <string name="label_frites">Frites</string>
    <string name="label_sauce">Sauce</string>
</resources>