Listen sind toll. Sie helfen dir viele Informationen auf strukturierte Weise darzustellen. Auf mobilen Android-Geräten hat die Liste einen besonderen Stellenwert, denn sie ist perfekt für kleine Bildschirme.
Auf Smartphones hast du kaum Platz mit Tabellen zu arbeiten, da meist einfach kein Platz für mehrere Spalten ist.
Durch Listen kann der User deiner App bequem scrollen. Über diese Benutzerfreundlichkeit freut sich der User.
Wählt der User einen Listeneintrag aus, indem er ihn berührt, öffnet sich eine weitere Activity, die ihm mehr Informationen zeigt. Toll oder?
Listen machen deine User also glücklich, das haben wir jetzt festgestellt.
so
Erstellen wir jetzt mal eine Liste in Android, damit du auch weißt wie das geht.
Listen in Android erstellen, mithilfe einer ListView und eines ArrayAdapters
Android hat APIs und Klassen für (fast) alles, was das Entwicklerherz begehrt.
So gibt es auch eine View-Klasse, die nichts anderes macht, als Listen darzustellen, danke dafür Android! Diese Klasse, von der ich spreche, heißt ListView.
Um eine Liste mithilfe einer ListView zu erstellen brauchen wir folgendes:
- Daten – Wir benötigen Daten, mit denen wir unsere Liste füttern. Am besten geeignet für einfache Listen, deren Einträge nur aus einer Textzeile bestehen, ist ein String-Array
- Adapter – Der Adapter baut aus den Daten, die Listeneinträge zusammen. Es gibt vorgefertigte Adapter, zum Beispiel der ArrayAdapter. Für komplexere Listen, kann man auch seine eigenen Adapter entwickeln. Wie das geht lernst du in einer späteren Lektion
- ListView – Die Klasse zum Darstellen unserer Liste
Sehr gut, du weißt jetzt, was du brauchst, um eine simple Liste in Android zu erstellen. Wie du die einzelnen Komponenten einsetzt, lernst du jetzt.
1. Android Projekt erstellen
Wie immer erstellst du zuerst ein neues Android Projekt in deiner Entwicklungsumgebung.
2. ListView zum Layout hinzufügen
Die Layout-Datei unseres jungfräulichen Projekts bekommt nun als erstes eine ListView spendiert. Dazu bearbeitest du die Layout-Datei main.xml, sodass sie am Ende so aussieht.
1 2 3 4 5 6 7 8 9 10 11 12 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/list_view" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> |
Wir erstellen eine ListView mit der ID list_view, welches wir in ein LinearLayout legen.
3. ListView in MainActivity erstellen
Als nächstes initialisieren wir unsere ListView in der MainActivity. Wie du Gui-Elemente initialisieren kannst, hast du ja bereits gelernt.
Zunächst benötigen wir eine Klassenvariable und Überraschung es wird die ListView sein.
Also verpasst du deiner MainActivity jetzt folgende Zeile.
1 |
ListView lView; |
Anschließend initialisierst du lView in der onCreate anhand der ID, die wir unserer View eben verliehen haben.
1 |
lView = (ListView) findViewById(R.id.list_view); |
Die Liste haben wir jetzt schonmal initialisiert, doch leider ist sie noch komplett leer, das ändern wir aber jetzt.
4. Ein String-Array erstellen
Um ein String-Array zu erstellen, könntest du ein Hard-Coded Array erstellen, sprich direkt in der MainActivity. Das ist aber unschön, denn Daten, wie Strings kommen in Android in den Ordner ressources.
So kannst du deine Strings leichter wiederverwenden und später auch übersetzen.
Also navigiere jetzt zum Ordner res/values und erstelle eine neue XML-Datei, mit dem Namen arrays.xml.
In dieser Datei definierst du jetzt das Array, mit dem wir unsere Liste füttern möchten.
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="list_array"> <item>Tippscom ist cool!</item> <item>Apps programmieren macht Spaß</item> <item>I love Android</item> <item>Ich bin ein toller Listeneintrag</item> </string-array> </resources> |
5. Adapter erstellen und Liste mit Daten füttern
Jetzt möchten unsere Liste endlich mal mit Daten befüllen. Dafür brauchen wir einen ArrayAdapter, der unser Array in Listeneinträge umwandelt.
Wechsle wieder zu deiner MainActivity und gönne der onCreate ein paar weitere Zeilen Code.
1 2 |
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, R.array.list_array); lView.setAdapter(adapter); |
Unser ArrayAdapter hat in diesem Fall 3 Parameter.
Das ist zum einen der Context, also die MainActivity, oder einfach nur this.
Der 2. Parameter ist die Layout-Datei des Listeneintrags, der definiert, wie ein Listeneintrag dargestellt wird. Hierfür verwenden wir einfach die vorgefertigte Resource android.R.layout.simple_list_item1.
Der letzte Parameter ist unser Array, mit dessen Items der Adapter die Listeneinträge bestücken soll.
Das war es auch schon wieder mit dieser Lektion, in der du gelernt hast einfache Listen in Android zu erstellen.
In der nächsten Lektion geht es darum, wie du definierst, was bei einem Klick auf einen Listeneintrag passieren soll.
Hat dir die Lektion gefallen? Ja? Dann freue ich mich über dein Feedback hier in den Kommentaren!
Verpasse keine Lektion und verbinde dich mit Tippscom auf Google+ und Facebook.
Hi Aydin,
Danke für das Feedback. Schau dir mal das Kommentar von Mathias an, vielleicht hilft dir diese Lösung ja weiter. 😉
Viele Grüße
Hi Mathias,
Freut mich, dass es Dir gefällt. Danke, dass du deine Lösung hier geteilt hast, das hilft bestimmt noch dem ein oder anderen.
Viele Grüße
Hallo Marius,
erstmal danke für das Tutorial, ich habe so einiges dazu gelernt.
Allerdings muss ich bemängeln dass der Code irgendwo einen Fehler haben muss.
Ich habe alles so geschrieben wie in deinem Tutorial lediglich mit eigenen variablen Namen. Doch es hat mit dem speichern einfach nicht funktioniert.
Nach ein paar verzweifelten Stunden habe ich beschlossen deinen Code downzuloaden um zu schauen ob der funktioniert. Leider vergebens, weder auf dem Emulator noch meinem Smartphone speichert die App die Tasks ab. Es wird zwar eine XML Datei erstellt aber beim schließen und öffnen der App werden alle Tasks gelöscht oder nicht geladen.
Ich hab absolut keine Ahnung woran das liegen könnte da ich deinen Code ja 1 zu 1 rüber kopiert habe.
Freundliche Grüße
Aydin
Hallo Marius,
hab das gleiche Problem wie die anderen. Die Liste die eigentlich durch ListView angezeigt werden sollte ist leer. Das Problem habe ich folgendermaßen gelöst:
String[] functions = getResources().getStringArray(R.array.list_array);
ListAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, functions);
Ansonsten ein super Tutorial! Werde ich noch bis zum Ende durchführen 🙂
LG
Hi Florian,
Leider kann ich dir mit den Infos die du mir in deinem Kommentar geschildert hast wenig anfangen. Es könnte ein Problem von Android Studio sein, oder du hast vergessen in deinen resources das Array list_array zu definieren, da Android Studio diese resource anscheinend nicht findet.
Hoffentlich konnte ich Dir damit weiterhelfen! 😀
Viele Grüße
Marius
Hallo Marius,
ich habe das gleiche Problem wie meine Vorredner.
Die App lässt sich problemlos starten, aber die Liste ist leer.
In Android Studio wird in der MainActivity bei
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, R.array.list_array);
der Eintrag “R.array.list_array” mit dem Hinweis belegt: “Expected resource of type id”
Weißt du, woran das liegt und wie man den Fehler beheben kann?
LG, Florian
Hi Killian,
Danke dass dir mein Blog gefällt! 😀
Leider kann ich dir so auf die schnelle nicht genau sagen woran das liegt. Schau dir am besten mal mein ToDo-Listen Tutorial an.
Da zeige ich auch eine Liste und den Quellcode kannst du dir downloaden.
Hoffe das hilft Dir!
Viele Grüße
Marius
Hallo Marius,
zunächst einmal vielen Dank für die schönen, lässigen Tutorials. Meine ListenApp zeigt bei diesem Beispiel nur eine leere Seite an, als würde er die Einträge von dem Array nicht lesen können. Errors werden nicht ausgegeben. Weißt du wo der Fehler liegt.
Vielen Dank und liebe Grüße
Kilian
Hi Peter,
Welche IDE nutzt du und welche Exception bekommst du, wenn du die App versuchst zu starten?
Beste Grüße
Hi Marius,
die arrays.xml wird bei mir auch nicht genommen.
Wenn ich ein Stringarray hard in die Activity code und diese in den Adapter stecke funktioniert es.
Hatte zuerst den verdacht dass es an der namensgebung der xml liegt, ohne erfolg.
Vllt kannst du das ganze nochmal überprüfen und herausfinden woran die auslagerung scheitert.
Gruss
Hey Marcel,
Schau mal bei Punkt “4. Ein String-Array erstellen”. Hast du denn die Datei arrays.xml in res/values erstellt und mit Werten gefüllt?
Viele Grüße
Marius
Hey Marius,
mir wird R.array.list_array als error angezeigt und wenn ich drüber hovere
gibt’s die Meldung “Expected resource of type id”.
Weißt du woran das liegt?
Mfg