AdapterView
est un
ViewGroup
qui affiche les éléments chargés dans un adaptateur. Le type d'adaptateur le plus courant provient d'une source de données basée sur des tableaux.
Ce guide explique comment effectuer plusieurs étapes clés liées à la configuration d'un adaptateur.
Remplir la mise en page avec des données
Pour ajouter des données à la mise en page que vous créez dans l'interface utilisateur de votre application, ajoutez un code semblable à celui-ci:
Kotlin
val PROJECTION = arrayOf(Contacts.People._ID, People.NAME) ... // Get a Spinner and bind it to an ArrayAdapter that // references a String array. val spinner1: Spinner = findViewById(R.id.spinner1) val adapter1 = ArrayAdapter.createFromResource( this, R.array.colors, android.R.layout.simple_spinner_item) adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) spinner1.adapter = adapter1 // Load a Spinner and bind it to a data query. val spinner2: Spinner = findViewById(R.id.spinner2) val cursor: Cursor = managedQuery(People.CONTENT_URI, PROJECTION, null, null, null) val adapter2 = SimpleCursorAdapter(this, // Use a template that displays a text view android.R.layout.simple_spinner_item, // Give the cursor to the list adapter cursor, // Map the NAME column in the people database to... arrayOf(People.NAME), // The "text1" view defined in the XML template intArrayOf(android.R.id.text1)) adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) spinner2.adapter = adapter2
Java
// Get a Spinner and bind it to an ArrayAdapter that // references a String array. Spinner s1 = (Spinner) findViewById(R.id.spinner1); ArrayAdapter adapter = ArrayAdapter.createFromResource( this, R.array.colors, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s1.setAdapter(adapter); // Load a Spinner and bind it to a data query. private static String[] PROJECTION = new String[] { People._ID, People.NAME }; Spinner s2 = (Spinner) findViewById(R.id.spinner2); Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null); SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, // Use a template // that displays a // text view cur, // Give the cursor to the list adapter new String[] {People.NAME}, // Map the NAME column in the // people database to... new int[] {android.R.id.text1}); // The "text1" view defined in // the XML template adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s2.setAdapter(adapter2);
Notez qu'il est nécessaire que la colonne People._ID en projection soit utilisée avec CursorAdapter, sinon vous obtiendrez une exception.
Si, au cours du cycle de vie de votre application, vous modifiez les données sous-jacentes lues par votre adaptateur, vous devez appeler notifyDataSetChanged()
. La vue associée sera ainsi notifiée que les données ont été modifiées et qu'elle devrait s'actualiser automatiquement.
Remarque:Avec Android Studio 3.6 et versions ultérieures, la fonctionnalité de liaison de vue peut remplacer les appels findViewById()
et offre une sûreté du typage au moment de la compilation pour le code qui interagit avec les vues. Envisagez d'utiliser la liaison de vue au lieu de findViewById()
.
Gérer les sélections des utilisateurs
Pour gérer la sélection de l'utilisateur, définissez le membre AdapterView.OnItemClickListener
de la classe sur un écouteur et interceptez les modifications de la sélection.
Kotlin
val historyView: ListView = findViewById(R.id.history) historyView.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id -> Toast.makeText(context, "You've got an event", Toast.LENGTH_SHORT).show() }
Java
// Create a message handling object as an anonymous class. private OnItemClickListener messageClickedHandler = new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { // Display a messagebox. Toast.makeText(context,"You've got an event",Toast.LENGTH_SHORT).show(); } }; // Now hook into our object and set its onItemClickListener member // to our class handler object. historyView = (ListView)findViewById(R.id.history); historyView.setOnItemClickListener(messageClickedHandler);
Pour en savoir plus, consultez la rubrique Spinner.