Adapteransicht

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Informationen zur Arbeit mit Layouts in Compose

AdapterView ist eine ViewGroup, in der Elemente angezeigt werden, die in einen Adapter geladen wurden. Der häufigste Adaptertyp stammt aus einer arraybasierten Datenquelle.

In diesem Leitfaden wird beschrieben, wie Sie einige wichtige Schritte zum Einrichten eines Adapters ausführen.

Layout mit Daten füllen

Wenn Sie dem Layout, das Sie in der Benutzeroberfläche Ihrer App erstellen, Daten hinzufügen möchten, fügen Sie Code ähnlich dem 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);

Die Spalte „People._ID“ muss in der Projektion verwendet werden, die mit „CursorAdapter“ verwendet wird. Andernfalls wird eine Ausnahme ausgelöst.

Wenn Sie im Laufe der Lebensdauer Ihrer App die zugrunde liegenden Daten ändern, die von Ihrem Adapter gelesen werden, sollten Sie notifyDataSetChanged() aufrufen. Dadurch wird die angehängte Ansicht benachrichtigt, dass sich die Daten geändert haben und sie aktualisiert werden sollte.

Hinweis:In Android Studio 3.6 und höher kann die Funktion View Binding findViewById()-Aufrufe ersetzen und bietet Typsicherheit zur Kompilierzeit für Code, der mit Ansichten interagiert. Verwenden Sie stattdessen View Binding.findViewById()

Nutzerauswahl verarbeiten

Sie verarbeiten die Auswahl des Nutzers, indem Sie das AdapterView.OnItemClickListener-Element der Klasse auf einen Listener setzen und die Auswahländerungen abfangen.

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 Informationen finden Sie im Thema Spinner.