AdapterView è un
ViewGroup che mostra gli elementi caricati in un adattatore. Il tipo di adattatore più comune proviene da un'origine dati basata su array.
Questa guida mostra come completare diversi passaggi chiave relativi alla configurazione di un adattatore.
Riempi il layout con i dati
Per aggiungere dati al layout creato nella UI dell'app, aggiungi un codice simile al seguente:
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);
Tieni presente che è necessario avere la colonna People._ID nella proiezione utilizzata con CursorAdapter altrimenti riceverai un'eccezione.
Se, durante il ciclo di vita dell'applicazione, modifichi i dati sottostanti letti dall'adattatore,
devi chiamare notifyDataSetChanged(). In questo modo, la visualizzazione allegata
riceverà una notifica che indica che i dati sono stati modificati e che deve essere aggiornata.
Nota:con Android Studio 3.6 e versioni successive, la funzionalità
view binding può sostituire le chiamate
findViewById() e fornisce la sicurezza dei tipi in fase di compilazione per
il codice che interagisce con le visualizzazioni. Prendi in considerazione l'utilizzo del binding delle visualizzazioni anziché di
findViewById().
Gestire le selezioni effettuate dall'utente
Gestisci la selezione dell'utente impostando il membro AdapterView.OnItemClickListener della classe su un listener e
intercettando le modifiche alla selezione.
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);
Per ulteriori informazioni, consulta l'argomento Spinner.