Android_Tutorial_Lektion16_fotolia_RA_Studio_46292813

Programmier Tutorial: Apps für Android entwickeln – Teil 16: Daten mit einem ListView anzeigen

In dieser Lektion werden wir einen ListView als zentrales Element in unser App-Layout integrieren. Durch den ListView sollen mehrere Zitate auf dem Bildschirm des Android Geräts dargestellt werden.

In der momentanen Entwicklungsstufe werden wir für die Zitate noch lokal gespeicherte Beispieldaten verwenden. Die Beispieldaten werden wir als App Ressource anlegen. Später wird unsere Android App die Zitate aber dynamisch aus dem Internet laden.


In Bezug auf die vorherige Lektion ist diese Lektion als zweiter von vier Arbeitsschritten zu sehen, die für die Verbindung von Daten und Layout notwendig sind.

Beginnen werden wir diese Lektion mit etwas Theorie und Praxis über das Verbinden von Daten und Benutzeroberfläche in Android. Anschließend werden wir einige Zitate als Beispieldaten in einem String-Array als App Ressource anlegen. Danach werden wir ein ListView-Element in die visuelle Struktur der Start-Activity einfügen.

Dieses ListView-Element werden wir dann mit Hilfe eines ArrayAdapters mit unseren Beispieldaten verbinden. Dies ist der Moment in dem die Verbindung der Daten mit der Benutzeroberfläche stattfindet. Abschließend werden wir unsere Android App im Emulator auf einem Android Virtual Device ausführen und den ListView betrachten.

1. Integrieren eines ListViews in eine Android App

Um einen ListView in eine Android App zu integrieren, sind mehrere Schritte notwendig. Zunächst muss der ListView in einer XML-Layout Datei definiert und in ein übergeordnetes Layout integriert werden. Der so definierte ListView kann aber noch nichts, da er nur ein Container für View-Elemente ist und weder deren Typ noch deren Inhalte kennt.

Dieser Container muss also noch mit Inhalt gefüllt werden. Als Inhalt nimmt ein ListView Zeilen in sich auf. Jede Zeile besteht dabei aus View-Elementen, die nach einem genau vorgegebenen Schema (Layout) angeordnet sind. Dieses Schema ist das Zeilenlayout des ListViews. Wir haben ein solches Zeilenlayout bereits in der vorherigen Lektion erstellt.

Das Füllen des ListViews wird aber nicht von dem Zeilenlayout durchgeführt, sondern von einem Adapter. Dieser Adapter ist zum einen mit einer Datenquelle verbunden und zum anderen mit dem Zeilenlayout. Der Adapter erstellt nun die Zeilen des ListViews. Die dafür notwendigen Daten extrahiert er aus der angeschlossenen Datenquelle. Anschließend ordnet er diese Daten den zugehörigen View-Elementen des Zeilenlayouts zu. Welche Daten welchem View-Element zugeordnet werden, ist Aufgabe des Adapters. Für komplexe Zeilenlayouts muss daher ein eigener angepasster Adapter implementiert werden.

Als letzter Schritt muss der Adapter noch mit dem ListView verbunden werden. So kann der Adapter die von ihm erstellten Zeilen in den ListView einfügen. Jede Zeile ist dabei eine Hierarchie von View-Objekten. In unserem Fall besteht jede Zeile aus drei View-Objekten, einem ImageView und zwei TextViews, die von einem ViewGroup-Objekt umschlossen sind. Dies ist exakt so im Zeilenlayout definiert worden.

Ein ListView wird also mit den folgenden drei Schritten in eine Android App integriert:

  1. Definieren des ListViews in einer XML-Layout Datei
  2. Instanziieren des Adapters (Zuweisen von Datenquelle und Zeilenlayout)
  3. Verbinden des Adapters mit dem ListView

1.1 Definieren des ListViews in einer XML-Layout Datei

Zunächst muss der ListView definiert werden. Dies geschieht normalerweise in einer XML-Layout Datei. Könnte aber auch direkt im Quellcode erfolgen. Wir werden den ListView unserer Android App per XML auf folgende Art definieren:

<ListView
    android:id="@+id/listview_activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Das XML-Vokabular für das Vorgeben der UI-Elemente entspricht den tatsächlichen View– und ViewGroup-Klassen von Android. Daher wird mit den oberen vier Zeilen zur Laufzeit ein ListView-Objekt erzeugt. Dies geschieht indirekt, da erst beim Kompilieren der eigenen App die Elemente der XML-Layout Dateien in View-Ressourcen umgewandelt werden.

Auf ein so definiertes ListView-Element kann zur Laufzeit über seine ID zugegriffen werden. In unserem oberen Code-Beispiel haben wir die ID des ListViews in Zeile 2 festgelegt.

Der Zugriff auf das ListView-Objekt erfolgt zur Laufzeit über die Ressourcen-Klasse R in folgender Form:

ListView myListView = (ListView) findViewById(R.id.listview_activity_main);

Die Typ-Umwandlung (type cast) muss erfolgen, da die findViewById() Methode als Rückgabewert ein View-Objekt liefert. Dem ListView-Objekt kann später ein Adapter zugewiesen werden. Doch vorher muss dieser Instanziiert werden.

1.2 Instanziieren des Adapters (Zuweisen von Datenquelle und Zeilenlayout)

In Android werden Datensätze mit Hilfe von Adaptern an User Interface-Elemente gebunden. Einem Adapter wird dazu eine Datenquelle zugewiesen. Zusätzlich erhält der Adapter eine Referenz auf ein View-Element, welches die Daten darstellen soll.

Sehr häufig werden ArrayAdapter und CursorAdapter für diese Aufgabe verwendet. Für unsere Android App werden wir einen ArrayAdapter benutzen, da die zugrunde liegenden Daten in einem Array bzw. einer ArrayList gehalten werden.

Um den ArrayAdapter zu erstellen, müssen ihm bei der Initialisierung die folgenden Argumente übergeben werden:

  • Die App-Umgebung als Context-Objekt, meist die Activity
  • Die XML-Layout Datei des Zeilenlayouts als Ressourcen-ID
  • Die ID des im Zeilenlayout enthaltenen TextView-Elements, welches die Daten anzeigen soll
  • Die zugrunde liegenden Daten als ArrayList-Objekt

Im Quellcode würde die Initialisierung eines ArrayAdapters dann wie folgt erfolgen:

ArrayAdapter<String> myArrayAdapter =
        new ArrayAdapter<>(
                this, // Die aktuelle Umgebung (diese Activity)
                R.layout.list_row, // Die ID des Zeilenlayouts (der XML-Layout Datei)
                R.id.quote_text,   // Die ID eines TextView-Elements im Zeilenlayout
                stringArrayList);  // Beispieldaten in einer ArrayList

In Zeile 3 übergeben wir als App-Umgebung die aktuelle Activity-Instanz. In Zeile 4 weisen wir dem ArrayAdapter das Zeilenlayout zu, nach welchem er die Zeilen des ListViews mit View-Objekten füllen soll. Dazu übergeben wir die Ressourcen-ID der XML-Layout Datei, die wir mit Hilfe der Ressourcen-Klasse R auslesen können.

In Zeile 5 übergeben wir dem ArrayAdapter die ID des TextView-Elements, von welchem der jeweilige Datensatz ausgegeben werden soll. Dieses TextView-Element ist ein View-Element des Zeilenlayouts. Später, wenn der ArrayAdapter die Zeilen des ListViews erstellt, wird er diesen TextView mit Inhalten aus der angeschlossenen Datenquelle befüllen.

Die zu verwendende Datenquelle übergeben wir in Zeile 6 in Form einer ArrayList. In diesem Code-Beispiel enthält die ArrayList einfache String-Objekte. Später werden wir von der ArrayList Objekte unseres eigenen Datenmodells verwalten lassen. Dann ist es allerdings auch notwendig einen angepassten ArrayAdapter zu implementieren.

Damit der ArrayAdapter die ListView-Zeilen erzeugen kann, muss er nun noch mit dem ListView-Objekt verbunden werden.

1.3 Verbinden des Adapters mit dem ListView

Das Verbinden des erstellten ArrayAdapters mit dem ListView ist sehr einfach. Es besteht lediglich aus zwei Schritten. Zuerst muss eine Referenz auf das ListView-Objekt erhalten werden und anschließend mit der Methode setAdapter() der ArrayAdapter dem ListView zugewiesen werden.

Der folgende Codeblock veranschaulicht dies:

ListView myListView = (ListView) findViewById(R.id.listview_activity_main);
myListView.setAdapter(myArrayAdapter);

In Zeile 1 wird mit der Methode findViewById() in der aktuell vorliegenden View-Hierarchie, bei uns die der MainActivity, nach einem View-Objekt mit der ID listview_activity_main gesucht. Diese ID haben wir den in Abschnitt 1.1 definierten ListView zugewiesen.

Als Rückgabewert liefert die findViewById() Methode ein View-Objekt zurück, das wir noch mittels type casting in ein ListView-Objekt umwandeln müssen.

Dieses ListView-Objekt verbinden wir in Zeile 2 mit dem ArrayAdapter-Objekt. Dazu rufen wir die Methode setAdapter() auf dem ListView-Objekt auf und übergeben ihr als einziges Argument das ArrayAdapter-Objekt. Das war alles. Mit diesem letzten Schritt wurde die Verbindung von Daten und Benutzeroberfläche vollzogen.

Der ArrayAdapter liefert nun für jede sichtbare Zeile des ListViews die dazustellenden View-Objekte. Dabei erstellt der Adapter die Zeilen nach dem ihm zugewiesenen Zeilenlayout. Die Inhalte für die View-Elemente des Zeilenlayouts extrahiert der Adapter aus der mit ihm verbundenen Datenquelle.

Wenn der Benutzer die angezeigte Liste nach oben oder unten scrollt, werden vom Adapter weitere Zeilen erzeugt und dem ListView zum Darstellen übergeben. Damit das Scrollen sehr sanft erfolgt, erzeugt der Adapter neben den sichtbaren Zeilen noch zwei weitere als Reserve. Einmal die nächst obere und einmal die nächst untere Zeile.

2. Erstellen von Beispieldaten als App Ressource

Wie man einen ListView in eine Android App integriert, haben wir nun erfahren. Doch bevor wir einen ListView in unsere eigene App integrieren können, müssen wir noch eine Datenquelle anlegen. Dies werden wir in diesem Abschnitt vornehmen.

Als Datenquelle soll uns ein einfacher String-Array dienen, den wir mit Beispieldaten (mock data) befüllen werden. Den String-Array werden wir als App Ressource in einer eigenen XML Datei anlegen. Daher müssen wir zunächst eine neue XML-Ressourcen Datei erstellen und anschließend in ihr den String-Array definieren.

Die zu erstellende XML Datei muss in dem res/values/ Ressourcen-Ordner abgelegt werden. Der Dateiname kann in diesem Fall frei gewählt werden, da es sich bei einem String-Array um eine nicht komplexe Ressource handelt und solche als XML-Elemente definiert werden. Es ist jedoch empfehlenswert einen selbst sprechenden Dateinamen zu wählen, der über die enthaltenen App Ressourcen informiert. Wir nennen die Datei daher arrays.xml.

Wir erstellen nun die neue Ressourcen Datei arrays.xml folgendermaßen:

  1. Mit der rechten Maustaste auf den Ordner values/ in dem Project Tool Window klicken.
  2. Anschließend den Eintrag New des Kontext-Menüs anklicken.
  3. Danach auf Values resource file klicken.
listview_new_values_file

Erstellen eines Values Resource File für die arrays.xml Ressourcen Datei

Anschließend öffnet sich der New Values Resource File-Dialog, in welchem wir den Namen der zu erstellenden XML-Datei vorgeben müssen:

listview_new_values_resource_dialog

Dateinamen für die neue XML-Ressourcen Datei vorgeben

Wir tragen in das Feld Enter a new file name den Wert arrays.xml ein und bestätigen anschließend den Dialog mit einem Klick auf den OK Button, woraufhin Android Studio die neue XML-Datei automatisch anlegt und im Editorfenster öffnet.

Falls die Datei nicht automatisch geöffnet wurde, führen wir das Öffnen manuell durch. Dazu klicken wir doppelt auf ihren Dateinamen arrays.xml im Project Tool Window von Android Studio. Die Datei befindet sich im res/values/ Ordner unseres Projekts.

Den generierten XML-Code löschen wir vollständig und fügen an dessen Stelle den folgenden XML-Code ein:

arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="sample_quotes">
        <item>Des Menschen größtes Verdienst bleibt wohl, wenn er die Umstände soviel als möglich bestimmt und sich so wenig als möglich von ihnen bestimmen läßt.</item>
        <item>Glückselig nenne ich den, der, um zu genießen, nicht nötig hat, unrecht zu tun, und um recht zu handeln, nicht nötig hat zu entbehren.</item>
        <item>Die Menschen verdrießt\'s, daß das Wahre so einfach ist; sie sollten bedenken, daß sie noch Mühe genug haben, es praktisch zu ihrem Nutzen anzuwenden.</item>
        <item>Wir gelangen nur selten anders als durch Extreme zur Wahrheit – wir müssen den Irrtum – und oft den Unsinn – zuvor erschöpfen, ehe wir uns zu dem schönen Ziele der ruhigen Weisheit hinaufarbeiten.</item>
        <item>Manchmal sieht unser Schicksal aus wie ein Fruchtbaum im Winter. Wer sollte bei dem traurigen An sehn [sic] desselben wohl denken, daß diese starren Äste, diese zackigen Zweige im nächsten Frühjahr wieder grünen, blühen, sodann Früchte tragen könnten, doch wir hoffen\'s, wir wissen\'s.</item>
        <item>Fürchte dich nicht vor der Verwirrung außer dir, aber vor der Verwirrung in dir; strebe nach Einheit, aber suche sie nicht in der Einförmigkeit; strebe nach Ruhe, aber durch das Gleichgewicht, nicht durch den Stillstand deiner Tätigkeit.</item>
        <item>Sage mir, mit wem du umgehst, so sage ich dir, wer du bist; weiß ich, womit du dich beschäftigst, so weiß ich, was aus dir werden kann.</item>
        <item>Denn eifersüchtig sind des Schicksals Mächte. Voreilig Jauchzen greift in ihre Rechte. Den Samen legen wir in ihre Hände, Ob Glück, ob Unglück aufgeht, lehrt das Ende.</item>
        <item>Denken Sie immer: daß wir nur eigentlich für uns selbst arbeiten. Kann das jemand in der Folge gefallen oder dienen, so ist es auch gut. Der Zweck des Lebens ist das Leben selbst.</item>
        <item>Das Leben, so gemein es aussieht, so leicht es sich mit dem Gewöhnlichen, Alltäglichen zu befriedigen scheint, hegt und pflegt doch immer gewisse höhere Forderungen im Stillen fort und sieht sich nach Mitteln um, sie zu befriedigen.</item>
    </string-array>

    <string-array name="quote_authors">
        <item>goethe</item>
        <item>heine</item>
        <item>herder</item>
        <item>hoelderlin</item>
        <item>jean_paul</item>
        <item>keller</item>
        <item>nietzsche</item>
        <item>schiller</item>
        <item>schopenhauer</item>
        <item>unknown</item>
        <item>wieland</item>
    </string-array>

</resources>

Der String-Array wird über den <string-array> XML-Tag definiert. Innerhalb dieses Tags befinden sich die einzelnen Strings, die als item-Elemte dem Array hinzugefügt werden.

Für den String-Array muss zudem ein Name vorgegeben werden. Dies erfolgt mit Hilfe des name-Attributs. Der Name wird als Ressourcen-ID verwendet, über die auf den Array zur Laufzeit zugegriffen werden kann. Wir haben in Zeile 4 als Namen für den String-Array, der die Beispielzitate enthält, sample_quotes festgelegt.

Zudem haben wir in Zeile 17 einen weiteren String-Array angelegt, welcher die IDs der Zitatautoren enthält. und für diesen den Namen quote_authors vorgegeben. Auf diesen zweiten String-Array werden wir erst in einer späteren Lektion zugreifen.

Mit folgendem Code können wir vom Quelltext aus auf die String-Arrays zugreifen:

String[] sampleQuotes = getResources().getStringArray(R.array.sample_quotes);
String[] sampleAuthors = getResources().getStringArray(R.array.quote_authors);

Der Zugriff erfolgt dabei über die Ressourcen-Klasse R und den Namen des String-Arrays. Zu beachten ist, dass hierbei nicht auf die Datei arrays.xml zugegriffen wird, sondern auf die innere Klasse array der Ressourcen-Klasse R, welche automatisch beim Kompilieren unseres Projekts generiert wird.

Aus diesem Grund hätten wir für Datei arrays.xml auch einen anderen Namen wählen können. Es wäre auch möglich gewesen, die String-Arrays in der strings.xml Datei zu definieren. Es ist für die Übersicht jedoch besser Arrays in einer eigenen übergeordneten Datei zu definieren.

In Android Studio sollte der Inhalt der arrays.xml Datei nun wie folgt aussehen:

listview_arrays_xml

Die XML-Ressourcen Datei arrays.xml mit dem in ihr definierten String-Array sample_quotes

Wir haben nun zwei String-Arrays in einer eigenen XML-Ressourcen Datei definiert. Den ersten Array werden wir später als Datenquelle für den ListView unserer Android App verwenden. Doch bevor wir dies tun können, muss der ListView dem Layout unserer Start-Activity hinzugefügt werden.

3. Einfügen des ListViews in das Layout der Start-Activity

Wir werden nun ein ListView-Element in das Layout der Start-Activity unserer Android App einfügen. Dazu werden wir einige Änderungen an der activity_main.xml XML-Layout Datei vornehmen, in welcher die visuelle Struktur des Startbildschirms unserer App definiert ist.

Wir öffnen die activity_main.xml Layout-Datei im Editorfenster von Android Studio. Dazu klicken wir doppelt auf ihren Dateinamen im Project Tool Window. Die Datei befindet sich im res/layout/ Ordner unseres Projekts. Standardmäßig öffnet sich nun das Editorfenster in der Design-Ansicht. Damit der XML-Code angezeigt wird, müssen wir unten im Editorfenster den Tab Text anklicken.

Den bisherigen XML-Code der activity_main.xml Datei ersetzen wir nun vollständig mit folgendem Code:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/colorDivider">

    <Button
        android:id="@+id/button_activity_main"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/default_margin"
        android:textSize="@dimen/default_font_size"
        android:text="@string/text_button_activity_main" />

    <ListView
        android:id="@+id/listview_activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginEnd="@dimen/default_margin"
        android:layout_marginStart="@dimen/default_margin"
        android:divider="@color/colorDivider"
        android:dividerHeight="@dimen/default_margin" />

</LinearLayout>

Mit dem oberen XML-Code definieren wir das UI-Layout für unser Start-Activity. Die visuelle Struktur der Activity besteht aus einem LinearLayout-Element, einem Button–Element und dem neu eingefügten ListView-Element. Der ListView ist an die Stelle des, in der vorherigen Lektion erstellen, Zeilenlayouts gerückt. Das LinearLayout-Element ist das Wurzelelement des XML-Layouts und nimmt in sich die beiden anderen UI-Elemente auf.

In den Zeilen 16 – 23 definieren wir das ListView-Element. Damit wir später vom Quellcode aus auf den ListView zugreifen können, weisen wir ihm die Ressourcen-ID listview_activity_main zu. Mit den nachfolgenden vier Attributen definieren wir die Breite und Höhe sowie die Seitenabstände des ListViews.

Mit den letzten beiden Attributen legen wir die Farbe und Höhe des ListView-Dividers fest. Durch den Divider werden die einzelnen ListViews-Zeilen voneinander separiert und dadurch die Lesbarkeit der Liste verbessert.

In Android Studio sollte der Inhalt der activity_main.xml Datei nun wie folgt aussehen:

listview_activity_main

Die XML-Layout Datei activity_main.xml mit den vorgenommenen Änderungen

Den nun definierten ListView werden wir als Nächstes mit den Beispieldaten verbinden. Diese Aufgabe lassen wir von einem Adapter übernehmen. Da die Beispieldaten in einem String-Array hinterlegt sind, werden wir für die Verbindung von Daten und ListView einen ArrayAdapter verwenden. Diesen werden wir im nächsten Abschnitt erstellen.

4. Den ListView über einen ArrayAdapter mit den Beispieldaten verbinden

Wir haben nun ein ListView-Element in das Layout der Start-Activity integriert, auf das wir zur Laufzeit über seine Ressourcen-ID zugreifen können. Weiterhin haben wir einige Zitate als Beispieldaten in einem String-Array als App Ressource angelegt, die wir von dem ListView ausgeben lassen können.

Somit sind alle Voraussetzungen erfüllt, um den ListView mit den Daten zu verbinden. Alles was wir dafür jetzt noch benötigen ist ein passender Adapter. Da die Beispieldaten in einem String-Array hinterlegt sind, ist ein ArrayAdapter die dafür ideale Wahl.

Wir werden nun einen solchen ArrayAdapter erstellen und ihn mit dem eben definierten ListView verbinden. Dazu werden wir einige Änderungen an der MainActivity.java Klassendatei vornehmen, welche momentan noch aus sehr wenigen Zeilen Quellcode besteht:

listview_main_activity_start

Die Klassendatei MainActivity.java zu Beginn dieser Lektion

Um die notwendigen Änderungen durchzuführen, öffnen wir die Klassendatei MainActivity.java im Editor von Android Studio. Dazu klicken wir doppelt auf ihren Dateinamen im Project Tool Window. Die Klassendatei befindet sich im Package-Ordner de.codeyourapp.zitate unseres Projekts.

In die MainActivity-Klasse werden wir nun etwa 20 Code-Zeilen einfügen. Damit dies möglichst ohne Tippfehler erfolgt, ist es am besten den bisherigen Quellcode der Klasse vollständig zu löschen und an dessen Stellen den folgenden Quelltext einzufügen:

An dieser Stelle endet der freie Inhalt dieser Lektion. Wir hoffen, sie hat dir bis hierher gefallen! Du kannst sie im geschützten Bereich von ProgrammierenLernenHQ fortsetzen, in welchem sich alle Lektionen unserer Android Online-Kurse befinden.

Unsere Android Kurse bestehen aus insgesamt 43 großen Lektionen und sind unterteilt in 13 frei zugängliche und 30 Premium-Lektionen. Die Premium-Lektionen befinden sich in dem geschützten Bereich und sind nur für Käufer unserer Android Online-Kurse zugänglich.

plhq_teaser_hbox_gelb_fotolia_RA Studio_46292813 An dieser Stelle endet der freie Inhalt dieser Lektion. Wir hoffen, sie hat dir bis hierher gefallen! Du kannst sie durch Kauf unseres Android Online-Kurs Gesamtpakets freischalten.

In unserem Android Online-Kurs Gesamtpaket befinden sich 43 große Lektionen, in denen wir dir schrittweise zeigen, wie voll funktionstüchtige Android Apps programmiert werden.

Diese Lektion ist Teil unserer Android Kurse. Insgesamt sind unsere Online-Kurse unterteilt in 13 frei zugängliche und 30 Premium-Lektionen.

Die Premium-Lektionen befinden sich in dem geschützten Bereich und sind nur für Käufer des Android Online-Kurs Gesamtpakets zugänglich.



Welche Inhalte befinden sich im Android Online-Kurs Gesamtpaket?

  • Das Gesamtpaket enthält alle Android Online-Kurse von ProgrammierenLernenHQ.
  • Im Paket enthalten ist unser großer Android Apps Programmieren Online-Kurs. Dieser besteht aus 35 großen Lektionen und ist als Einstiegskurs konzipiert worden. Die Grundlagen der Android App Entwicklung praxisnah und verständlich zu lehren, ist das Hauptziel des Android Apps Programmieren Kurses.
  • Im Paket enthalten ist auch unser SQLite Datenbank App Programmieren Online-Kurs. Dieser besteht aus 8 großen Lektionen und ist als weiterführender Kurs konzipiert worden. Der Kurs schließt an unseren Android Apps Programmieren Hauptkurs an und widmet sich dem speziellen Thema der SQLite Datenbanken.
  • Durch den Kauf erhältst du unbegrenzten Zugang zu all unseren Android Online-Kursen. Wir werden in Zukunft weitere Android Kurse hinzufügen. Auch auf alle zukünftigen Kurse erhältst du vollen Zugriff.

Wir hoffen, Dich bald als neuen Kursteilnehmer unserer Android Online-Kurse begrüßen zu dürfen!

Einmal kaufen und dadurch zeitlich unbegrenzten Zugriff auf alle Inhalte unserer Android Online-Kurse erhalten.






Comments 77

  1. Hallo,
    ich bin neu dabei und hab einige Vorkenntnisse in C# aber nicht Java.
    Deshalb ist es etwas schwierig für mich die Fehler auszubessern.
    Ich hab bei mir ein Problem das bei mir steht :

    ListView aktienlisteListView = (ListView) rootView.findViewById(R.id.listview_aktienliste);
    Das Listview ist hierbei bei mir grau und ich denke es ist noch nicht richtig eingebunden, ich hab lange den Fehler gesucht aber leider habe ich ihn nicht gefunden

    Ich würde mich auf jede Hilfe freuen danke schonmal! ^^

    1. Post
      Author

      Hallo Khan,

      ist bei dir die ListView Klasse per Import-Anweisung in die MainActivityFragment Klasse eingebunden worden?

      import android.widget.ListView;
      

      Viele Grüße, Chris

  2. Hallo Zusammen,

    zuerst: Großes Lob an Chris, eine Klasse Seite zum Lernen von Android-App Entwicklung. Auch dein Udemy Kurs kann ich jeden nur ans Herz legen.
    Leider ist bei mir auf ein Fehler beim Ausführen der App im Emulator aufgetreten. Fehlermeldung:

    FATAL EXCEPTION: main
    Process: de.programmierenlernenhq.aktiehq.app, PID: 4233
    .
    .
    java.lang.RuntimeException: Unable to start activity ComponentInfo{de.programmierenlernenhq.aktiehq.app/de.programmierenlernenhq.aktiehq.app.MainActivity}: 
    android.view.InflateException: Binary XML file line #3: Binary XML file line #3: Error inflating class fragment
    Caused by: android.view.InflateException: Binary XML file line #3: Binary XML file line #3: Error inflating class fragment
    Caused by: android.view.InflateException: Binary XML file line #3: Error inflating class fragment
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
    at de.programmierenlernenhq.aktiehq.app.MainActivityFragment.onCreateView(MainActivityFragment.java:48)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
    .
    .
    

    ich kann hier leider nur vermuten, dass die Fehlermeldung „NullPointerException….“ liegt jedoch habe ich nach aktuellen Wissensstand keine Erfahrung bezüglich der Behebung. Weiß jemand Rat?

    Beste Grüße an alle,

    Erik

    1. Post
      Author

      Hallo Erik,

      bei Deinem Projekt liegt ein Fehler in einer XML-Layout Datei vor. Wenn du möchtest, kannst Du mir deine Projektdateien (den ganzen Android Studio Projektordner, aber OHNE die build-Unterordner) als ZIP per E-Mail zusenden. Die E-Mail Adresse kannst Du im Impressum finden. Ich schaue dann mal, ob ich herausfinden kann in welcher Datei der Fehler ist.

      Viele Grüße, Chris

    2. Hallo Chris,

      konnte nach Abgleich der bisherigen Tutorial-Schritte mittlerweile den Schreib-Fehler in der „list_item_aktienliste.xml“ wie von dir vermutet lokalisieren. Meine E-Mail hat natürlich keine Relevanz mehr .

      Nochmals Vielen Dank für den Hinweis und deine angebotene Hilfe. Alle Daumen nach Oben.

      Beste Grüße,
      Erik

    3. Post
      Author

      Hallo Erik,

      danke für’s Lob!

      Ja, kleine Schreibfehler in den XML-Dateien können große Probleme in Android verursachen. Leider kann Android Studio da nicht exakt auf den Fehler hinweisen.

      Viele Grüße, Chris

  3. Hallo,

    ich habe nun dieses Tutorial umgesetzt. Nun möchte ich diese Liste aber in ein bestehendes Programm implementieren. Wie mache ich das? Mit einer neuen ListView() ja eigentlich nicht, weil wir ja eine gemacht haben. „MainActivityFragment maf = new MainActivityFragment();“ so vielleicht? Aber ich habe keine Ahnung wie ich diese Liste in einer anderen Klasse erscheinen lassen soll oder in einer XML Datei deklarieren.

    Vielen Dank im Vorraus

    Danylo

  4. Hallo Chris,

    Ein tolles Tutorial zur Android-App Programmierung.
    Leider habe ich für den aktuellen Stand einen Fehler.
    Dir App lässt sich nicht starten. Es wird die Meldung: „AktieHQ wird wiederholt beendet“ angezeigt.
    Welche Ursache könnt dafür verantwortlich sein?

    Beste Grüße,
    Markus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.