Implémentation d'un champ de saisie avec autocomplétion sous Android

Le composant AutoCompleteTextView est une extension directe de la classe EditText qui permet d'améliorer l'interface utilisateur en proposant des suggestions dynamiques lors de la saisie. Par défaut, le filtrage des suggestions se déclenche dès que l'utilisateur tape deux caractères.

Voici deux méthodes distinctes pour alimenter ce composant en données : la génération d'une collection en Java et l'utilisation d'un tableau défini dans les ressources XML.

Définitino de l'interface utilisateur

La première étape consiste à déclarer le composant dans votre fichier de mise en page XML.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    android:orientation="vertical">

    <AutoCompleteTextView
        android:id="@+id/input_search"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Rechercher un langage..." />

</LinearLayout>

Approche 1 : Source de données dynamique en Java

Dans cette configuration, la liste des suggestions est construite directement dans la logique de l'activité. Un ArrayAdapter est ensuite utilisé pour faire le lien entre la collection de données et l'intreface.

package com.example.app.autocomplete;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import java.util.Arrays;
import java.util.List;

public class SearchActivity extends Activity {
    
    private AutoCompleteTextView searchField;
    private ArrayAdapter<String> suggestionAdapter;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);
        
        searchField = findViewById(R.id.input_search);
        
        // Initialisation de l'adaptateur avec une mise en page de liste standard
        suggestionAdapter = new ArrayAdapter<>(
                this, 
                android.R.layout.simple_dropdown_item_1line, 
                buildSuggestionList()
        );
        
        searchField.setAdapter(suggestionAdapter);
    }
    
    private List<String> buildSuggestionList() {
        // Simulation de données locales (souvent issues d'une API en production)
        return Arrays.asList(
                "JavaScript", 
                "TypeScript", 
                "Python", 
                "Ruby", 
                "Rust", 
                "Go"
        );
    }
}

Approche 2 : Externalisation via les ressources XML

Pour un code plus maintenable et pour faciliter les traductions, il est souvent préférable de stocker les chaînes de caractères dans le fichier strings.xml.

Déclarez d'abord un tableau de chaînes dans res/values/strings.xml :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">AutoDemo</string>
    
    <!-- Tableau de suggestions -->
    <string-array name="tech_stack_array">
        <item>Java</item>
        <item>Kotlin</item>
        <item>C++</item>
        <item>C#</item>
        <item>Swift</item>
    </string-array>
</resources>

La logique de l'activité est alors simplifiée pour charger ce tableau nativement et l'injecter dans l'adaptateur :

// Extraction du tableau de chaînes depuis les ressources
String[] availableTechnologies = getResources().getStringArray(R.array.tech_stack_array);

// Reconfiguration de l'adaptateur avec le nouveau jeu de données
suggestionAdapter = new ArrayAdapter<>(
        this, 
        android.R.layout.simple_dropdown_item_1line, 
        availableTechnologies
);

searchField.setAdapter(suggestionAdapter);

Étiquettes: Android autocompletetextview android-ui arrayadapter Java

Publié le 4 juin à 16h02