AdapterView
ist ein
ViewGroup
für Elemente, die in einen Adapter geladen wurden. Der häufigste Adaptertyp stammt aus einer Array-basierten Datenquelle.
In diesem Leitfaden erfahren Sie, wie Sie mehrere wichtige Schritte zum Einrichten eines Adapters ausführen.
Layout mit Daten füllen
Um dem Layout, das Sie auf der Benutzeroberfläche Ihrer App erstellen, Daten hinzuzufügen, fügen Sie Code wie den folgenden hinzu:
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);
Beachten Sie, dass die Spalte People._ID in der Projektion mit CursorAdapter verwendet werden muss. Andernfalls erhalten Sie eine Ausnahme.
Falls Sie im Laufe der Lebensdauer Ihrer Anwendung die zugrunde liegenden Daten ändern, die vom Adapter gelesen werden, sollten Sie notifyDataSetChanged()
aufrufen. Dadurch wird die angehängte Ansicht darüber informiert, dass die Daten geändert wurden, und sie sollte sich selbst aktualisieren.
Hinweis: Ab Android Studio 3.6 kann die Funktion Ansichtsbindung findViewById()
-Aufrufe ersetzen und die Kompilierungszeitsicherheit für Code bieten, der mit Ansichten interagiert. Verwenden Sie gegebenenfalls Ansichtsbindung anstelle von findViewById()
.
Nutzerauswahl verarbeiten
Sie verarbeiten die Auswahl des Nutzers, indem Sie das AdapterView.OnItemClickListener
-Mitglied der Klasse auf einen Listener setzen und die Auswahländerungen erfassen.
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);
Weitere Diskussionen finden Sie im Thema Spinner.