Programmier Tutorial - Apps für Android entwickeln - Daten mit einem ListView anzeigen

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


  1. Haupt-Layout eines Fragments in Android definieren
  2. Anlegen eines Layouts für die Listenelemente
  3. Erzeugen der Beispieldaten (mock data)
  4. Erstellen eines ArrayAdapters und Hinzufügen der Beispieldaten
  5. Erstellen des ListViews und Zuweisen des ArrayAdapters und Layouts
  6. Ausführen unserer Android App auf dem Smartphone, Tablet und im Emulator

Nun wünschen wir euch viel Spaß bei dem vierten Teil unseres großen Android Tutorials. Los geht’s!


1. Haupt-Layout eines Fragments in Android definieren

Ein Fragment ist ein modularer Container innerhalb einer Activity. Eine Activity kann mehrere Fragments enthalten. Unsere Android App besitzt genau ein Fragment, welches von der MainActivity erzeugt wird. Die MainActivity wird beim Starten unserer App automatisch ausgeführt.

Wir möchten nun für dieses Fragment ein FrameLayout mit einem ListView-Element definieren. Das neu definierte Layout kann dem Fragment in der Klasse MainActivityFragment.java zugewiesen werden.

Die MainActivityFragment-Klasse haben wir in Lektion 2 erstellt, wenn alle Schritte aus Teil 2: Neues Android Studio Projekt erstellen des Tutorials befolgt wurden.

In der folgenden Abbildung ist unser erstelltes Projekt zu sehen:

android fragment

Unser generiertes Android Projekt zu Beginn mit der Klasse MainActivityFragment

Wenn nun unsere Android Anwendung ausgeführt wird, dann erzeugt die MainActivity das MainActivityFragment, welches die zugewiesene XML-Layout Ressource (Markierung A und B) in eine Hierarchie von View-Objekten umwandelt. Das Aussehen unserer App können wir also durch Ändern der zugewiesenen XML-Layout Ressource nach unseren Vorstellungen gestalten.

Was eine Activity und ein Fragment genau ist, wird auf der Android Developer Webseite sehr ausführlich erklärt. Für weitere Informationen einfach folgende Links klicken:

Wir können die zugewiesene XML-Layout Ressource öffnen, indem wir mit Strg + Linksklick auf den Ressourcennamen fragment_main (Markierung A im oberen Bild) klicken, wie in der unteren Abbildung dargestellt:

android fragment ressource

Öffnen der XML-Layout Ressource “fragment_main” mit Strg + Linksklick

Wir klicken mit Strg + Linksklick auf den im Bild dargestellten Ressourcennamen fragment_main. Jetzt öffnet Android Studio die XML-Layout Datei fragment_main.xml, welche sich im app\src\main\res\layout Ordner unseres Android Projekts befindet.

Als Nächstes nehmen wir eine Änderung an der Datei fragment_main.xml vor:

  1. Austauschen des TextView-Objekts gegen ein ListView-Objekt

Die folgende Abbildung zeigt den anfänglichen Inhalt der fragment_main XML-Layout Datei:

android listview layout

Der Ausgangszustand unserer fragment_main XML-Layout Datei

Wir ersetzen nun den Code-Block des TextView-Objekts mit folgendem markierten Code. Um Tippfehler zu vermeiden, ist es am besten wenn ihr den unteren Quellcode kopiert und damit euren eigenen Quellcode ersetzt:

fragment_main.xml

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

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivityFragment">

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

</FrameLayout>

Dem ListView-Element haben wir die ID @+id/listview_aktienliste zugewiesen. Dazu haben wir das Attribut android:id verwendet. Dies muss auch in euren Quellcode unbedingt so definiert sein. Weiterhin haben wir die Breite und Höhe des Elements auf match_parent gesetzt.

In der unteren Abbildung ist die Änderung an der Layout Datei bereits vorgenommenen worden:

android listview layout

Die fragment_main XML-Layout Datei mit den gewünschten Änderungen

Hinweis: Es ist besonders wichtig, keinen Tippfehler in dem oberen Quellcode zu haben. Besonders muss darauf geachtet werden, dass mit android:id="@+id/listview_aktienliste" eine Ressourcen-ID für das ListView-Element festgelegt wird.

Jetzt haben wir das Layout unseres Fragments an unsere Bedürfnisse angepasst. Wir möchten später mit Hilfe des eben definierten ListView-Elements unsere Aktiendaten anzeigen lassen. Dazu müssen wir als Nächstes ein Layout für die einzelnen Einträge der Liste erstellen und definieren.

2. Anlegen eines Layouts für die Listenelemente

Unsere App soll später einmal Aktiendaten in einer Liste anzeigen. Die Liste wird von einem ListView-Objekt verwaltet werden. In der Liste werden verschiedene Einträge mit Finanzdaten enthalten sein. Für diese Einträge legen wir nun ein XML-Layout fest.


Android Apps Programmieren Online-Kurs


  • Ideal für den praxisnahen Einstieg in die Entwicklung von Android Apps
  • Besonders einsteigerfreundlich - jeder Arbeitsschritt ist exakt dokumentiert
  • Über 35 sehr umfangreiche und besonders verständliche Lektionen
  • Blick in den Android Online-Kurs

Jetzt im Angebot für 29,95 € statt 59 €
(gültig vom 21.03.19 bis 07.04.19)

Weitere Infos

Dazu müssen wir zunächst eine neue XML-Layout Datei erstellen. Wir können diese Datei sehr einfach mit Hilfe von Android Studio generieren lassen. Dazu klicken wir mit rechts auf den Layout-Ressourcen Ordner layout in der Projektansicht.

Es öffnet sich das entsprechende Kontext-Menü. Wir wählen darin zuerst New aus und klicken danach auf den Eintrag Layout resource file.

Die einzelnen Schritte sind zusätzlich in der folgenden Abbildung dargestellt:

android layout resource file

Eine neue Android Layout Ressource XML Datei erstellen

Unmittelbar nachdem wir auf den Eintrag Layout resource file geklickt haben, öffnet sich der Layout-Dialog New Layout Resource File. Hierin machen wir folgende Angaben:

  • File name: list_item_aktienliste
  • Root element: TextView

Euer Dialog sollte jetzt folgendermaßen aussehen:

android layout filename

Der Dialog New Layout Resource File

Jetzt wird von Android Studio automatisch die XML-Layout Datei list_item_aktienliste.xml generiert und in dem Layout-Ordner gespeichert.

Wir werden nun an der eben erzeugten XML-Layout Datei einige Änderungen vornehmen. Bei euch müsste die Datei automatisch von Android Studio geöffnet worden sein. Im Moment wird aber noch die Design-Perspektive angezeigt. Daher wechseln wir zunächst die Darstellungsweise, indem wir auf den Text-Tab (Markierung 1 in der unteren Abbildung) klicken.

Anschließend ersetzen wir den generierten Quellcode der XML-Layout Datei list_item_aktienliste.xml durch folgenden Code:

list_item_aktienliste.xml

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

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:gravity="center_vertical"
    android:id="@+id/list_item_aktienliste_textview" >

</TextView>

In Android Studio müsste die XML-Layout Datei list_item_aktienliste.xml nun wie folgt aussehen:

android textview

Vorgaben für das Layout unserer Listeneinträge

Mit diesem Schritt haben wir ein XML-Layout für unsere Listeneinträge definiert. Die einzelnen Einträge lassen wir in dem ListView-Objekt anzeigen. Wie die Anzeige der Einträge erfolgt, wird von dem eben definierten Layout vorgegeben. Als Nächstes werden wir Beispieldaten für die Listeneinträge selbst anlegen.

3. Erzeugen der Beispieldaten (mock data)

In der aktuellen Entwicklungsstufe unserer Android App können wir noch nicht auf echte Finanzdaten zurückgreifen. Für das Prüfen unserer View-Elemente benötigen wir aber Beispieldaten.

Dieses Problem können wir lösen, indem wir einfach Beispieldaten (mock data) von Hand anlegen und zwar in der MainActivityFragment.java Klassendatei. Da unser ListView-Objekt später einmal eine Liste von Aktien und relevante Daten anzeigen soll, erzeugen wir einen String-Array mit Beispieldaten, der echte Finanzdaten nachbilden soll.

Wir öffnen nun die Klasse MainActivityFragment.java und nehmen folgende Änderungen vor:

  1. Ganz oben im Code fügen wir die benötigten Import-Anweisungen ein.
  2. In der onCreateView() Methode fügen wir den ersten Codeblock ein (Erstellen des String-Arrays)
  3. Danach fügen wir in der gleichen Methode den zweiten Codeblock ein (Erzeugen der ArrayList)

MainActivityFragment.java

package de.programmierenlernenhq.aktiehq.app;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivityFragment extends Fragment{

    public MainActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        String [] aktienlisteArray = {
                "Adidas - Kurs: 73,45 €",
                "Allianz - Kurs: 145,12 €",
                "BASF - Kurs: 84,27 €",
                "Bayer - Kurs: 128,60 €",
                "Beiersdorf - Kurs: 80,55 €",
                "BMW St. - Kurs: 104,11 €",
                "Commerzbank - Kurs: 12,47 €",
                "Continental - Kurs: 209,94 €",
                "Daimler - Kurs: 84,33 €"
        };

        List<String> aktienListe = new ArrayList<>(Arrays.asList(aktienlisteArray));

        return inflater.inflate(R.layout.fragment_main, container, false);
    }

}

In den Zeilen 9 bis 11 importieren wir die benötigten Klassen und machen diese dadurch für unsere Klasse sichtbar, so dass wir auch ohne vollqualifizierenden Klassennamen auf sie zugreifen können.

In den Zeilen 22 bis 32 legen wir den Array aktienlisteArray vom Typ String an. Der Array enthält neun String-Einträge, die wir als Beispieleinträge für den ListView unserer App verwenden werden.

Anschließend erzeugen wir in der Zeile 34 aus dem String-Array die ArrayList aktienListe. Diese ArrayList werden wir einem ArrayAdapter zuweisen, der die Elemente der Liste dann als Basisdaten nutzen wird. Den ArrayAdapter werden wir im nächsten Abschnitt erstellen.

In Android Studio sollte die MainActivityFragment.java Klassendatei nun wie folgt aussehen:

android mock data

String-Array mit Beispieldaten erstellen, danach ArrayList mit Array füllen

Die Klasse MainActivityFragment können wir für den Moment geöffnet lassen. Wir werden die nächsten beiden Abschnitte darin weiterarbeiten.

4. Erstellen eines ArrayAdapters in Android und Hinzufügen der Beispieldaten

Android Apps Programmieren Online-Kurs

Unser Android Online-Kurs


Android Apps Programmieren

  • Ideal für den praxisnahen Einstieg in die Entwicklung von Android Apps
  • Besonders einsteigerfreundlich - jeder Arbeitsschritt ist exakt dokumentiert
  • Jede Lektion ist einem ganz speziellen Thema der App-Entwicklung gewidmet
  • Über 35 sehr umfangreiche und besonders verständliche Lektionen
  • Blick in den Android Online-Kurs

Jetzt im Angebot für 29,95 € statt 59 €
(gültig vom 21.03.19 bis 07.04.19)

Weitere Infos

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

Wir werden einen ArrayAdapter verwenden, um unsere im vorherigen Abschnitt erzeugte ArrayList aktienListe mit einem ListView zu verbinden. In diesem Abschnitt werden wir das Erstellen des ArrayAdapters behandeln. Im nächsten Abschnitt werden wir den ArrayAdapter an einen ListView binden.

Weiterführende Infos zu Adaptern in Android könnt ihr auf der Developerseite finden:

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

  1. Die App-Umgebung als Context
  2. Die XML-Layout Datei der Listeneinträge als Resource-ID
  3. Die ID des darin enthaltenen TextView-Elements, das die Daten anzeigen soll
  4. Die zugrunde liegenden Daten als Liste

Die App-Umgebung können wir mit getActivity() übergeben.

Der ArrayAdapter muss jetzt noch wissen wie er jedes Listenelement darstellen soll, dafür benötigt er eine Referenz auf die XML-Layout Datei list_item_aktienliste.xml. Auf die Resource-ID der XML-Layout Datei für die Listeneinträge greifen wir über die Ressourcen-Variable R zu. Wir verwenden dazu R.layout.list_item_aktienliste.

Außerdem muss der ArrayAdapter wissen, wie er die jeweiligen Einträge aus der Liste in einem TextView-Objekt darstellen soll. Dafür benötigt er eine Referenz auf das TextView-Element aus der XML-Layout Datei. Wir nutzen auch dafür die Variable R mit folgendem Code: R.id.list_item_aktienliste_textview.

Ohne Daten kann der ArrayAdapter keine TextView-Objekte erstellen und übermitteln. Daher müssen wir ihm noch unsere ArrayList aktienListe übergeben.

Die eben beschriebenen Schritte setzen wir nun in unserem Android Projekt um. Dazu öffnen wir die Klasse MainActivityFragment.java und nehmen in dieser folgende Änderungen am Quellcode vor:

  1. Ganz oben im Code fügen wir die benötigte Import-Anweisungen ein.
  2. In der onCreateView() Methode fügen wir den Codeblock zum Erstellen des ArrayAdapters kurz vor der return-Anweisung ein.

MainActivityFragment.java

package de.programmierenlernenhq.aktiehq.app;
 
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
public class MainActivityFragment extends Fragment{
 
    public MainActivityFragment() {
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
 
        String [] aktienlisteArray = {
                "Adidas - Kurs: 73,45 €",
                "Allianz - Kurs: 145,12 €",
                "BASF - Kurs: 84,27 €",
                "Bayer - Kurs: 128,60 €",
                "Beiersdorf - Kurs: 80,55 €",
                "BMW St. - Kurs: 104,11 €",
                "Commerzbank - Kurs: 12,47 €",
                "Continental - Kurs: 209,94 €",
                "Daimler - Kurs: 84,33 €"
        };
 
        List<String> aktienListe = new ArrayList<>(Arrays.asList(aktienlisteArray));

        ArrayAdapter<String> aktienlisteAdapter =
                new ArrayAdapter<>(
                        getActivity(), // Die aktuelle Umgebung (diese Activity)
                        R.layout.list_item_aktienliste, // ID der XML-Layout Datei
                        R.id.list_item_aktienliste_textview, // ID des TextViews
                        aktienListe); // Beispieldaten in einer ArrayList
 
        return inflater.inflate(R.layout.fragment_main, container, false);
    }
 
}

In Zeile 8 importieren wir die benötigte ArrayAdapter Klasse.

In den Zeilen 37 bis 42 erzeugen wir den ArrayAdapter. Dazu übergeben wir seinem Konstruktor:

  1. die aktuelle Anwendungsumgebung,
  2. die Ressourcen-ID der XML-Layout Datei, welche das Aussehen einer ListView-Zeile definiert,
  3. die Ressourcen-ID des TextView-Elements, welches die Strings der Beispieldaten ausgeben soll,
  4. und die Beispieldaten in Form einer ArrayList.

In Android Studio sollte die MainActivityFragment.java Klassendatei nun wie folgt aussehen:

android array adapter

ArrayAdapter erstellen und initialisieren

Jetzt haben wir unsere Beispieldaten dem ArrayAdapter aktienlisteAdapter zugewiesen und ihn mit den notwendigen Infos über das anzuwendende Layout versorgt. Er kann jetzt bei Bedarf aus einem Listeneintrag ein TextView-Objekt nach den Vorgaben unserer XML-Layout Datei list_item_aktienliste.xml erstellen. Als nächsten Schritt müssen wir den ArrayAdapter mit einem ListView-Objekt verbinden.

5. Erstellen des ListViews und Zuweisen des ArrayAdapters und Layouts

Ein ListView ist eine View-Gruppe, die eine Liste scrollbarer Elemente anzeigt. Die Listeneinträge werden automatisch von einem Adapter der Liste hinzugefügt. Dabei holt der Adapter den Inhalt von einem Array oder einer Datenbank und wandelt jeden einzelnen Eintrag in ein View-Objekt um, welches in die Liste eingefügt wird. Weitere Infos zu ListView.

In Android werden ListViews verwendet, wenn der Inhalt für ein Layout dynamisch, nicht vorbestimmt erzeugt wird. Der ListView benutzt einen Adapter, um Daten mit dem eigenen Layout zu verbinden. Dabei tritt der Adapter als Bindeglied auf. Er erhält die Daten aus einem Array oder einer Datenbank und konvertiert jeden Eintrag in ein View-Objekt. Die so erstellten View-Objekte können in das ListView-Layout eingefügt werden.

Auf diese Weise werden ListViews mit Elementen gefüllt, also indem man an den ListView einen Adapter bindet.


Android Apps Programmieren Online-Kurs


  • Ideal für den praxisnahen Einstieg in die Entwicklung von Android Apps
  • Besonders einsteigerfreundlich - jeder Arbeitsschritt ist exakt dokumentiert
  • Über 35 sehr umfangreiche und besonders verständliche Lektionen
  • Blick in den Android Online-Kurs

Jetzt im Angebot für 29,95 € statt 59 €
(gültig vom 21.03.19 bis 07.04.19)

Weitere Infos

Wir verwenden als Adapter einen ArrayAdapter, der ideal für Array-Datenquellen ist. Diesen haben wir bereits im vorherigen Abschnitt erzeugt. Unser ArrayAdapter erstellt für jedes Array-Element ein View-Objekt und platziert dessen Inhalt in ein TextView.

Wir möchten nun diesen ArrayAdapter an den ListView unserer App binden. Doch bevor wir dies ausführen können, müssen wir eine Referenz auf die ListView-Instanz anfordern. Für diese Aufgabe verwenden wir die findViewById() Methode.

Diese Methode sucht nach unserem ListView-Objekt, indem sie den View-Baum der MainActivityFragment-Klasse nach einer vorgegebenen Ressourcen-ID durchsucht. Als Rückgabewert liefert sie ein View-Objekt, die ListView-Instanz, zurück. Dieses müssen wir abschließend noch auf den Datentyp ListView konvertieren (type casting).

Um den ArrayAdapter mit dem ListView unserer App zu verbinden führen wir nun folgende Arbeitsschritte an der MainActivityFragment.java Klassendatei durch:

  1. Ganz oben im Code fügen wir die benötigte Import-Anweisungen ein.
  2. In der onCreateView() Methode fügen wir den markierten Codeblock zum Verbinden des ArrayAdapters mit dem ListView anstelle der bisherigen return-Anweisung ein.

MainActivityFragment.java

package de.programmierenlernenhq.aktiehq.app;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivityFragment extends Fragment{

    public MainActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        String [] aktienlisteArray = {
                "Adidas - Kurs: 73,45 €",
                "Allianz - Kurs: 145,12 €",
                "BASF - Kurs: 84,27 €",
                "Bayer - Kurs: 128,60 €",
                "Beiersdorf - Kurs: 80,55 €",
                "BMW St. - Kurs: 104,11 €",
                "Commerzbank - Kurs: 12,47 €",
                "Continental - Kurs: 209,94 €",
                "Daimler - Kurs: 84,33 €"
        };

        List<String> aktienListe = new ArrayList<>(Arrays.asList(aktienlisteArray));

        ArrayAdapter<String> aktienlisteAdapter =
                new ArrayAdapter<>(
                        getActivity(), // Die aktuelle Umgebung (diese Activity)
                        R.layout.list_item_aktienliste, // ID der XML-Layout Datei
                        R.id.list_item_aktienliste_textview, // ID des TextViews
                        aktienListe); // Beispieldaten in einer ArrayList


        View rootView = inflater.inflate(R.layout.fragment_main, container, false);

        ListView aktienlisteListView = (ListView) rootView.findViewById(R.id.listview_aktienliste);
        aktienlisteListView.setAdapter(aktienlisteAdapter);

        return rootView;

    }

}

In Zeile 9 importieren wir die benötigte ListView Klasse.

In Zeile 46 lassen wir von dem LayoutInflater eine View-Hierarchie aus der Layout-Datei fragment_main.xml erzeugen. Als Rückgabewert erhalten wir den RootView der erzeugten Hierarchie. Diesen speichern wir in der Variable rootView ab. Weitere Hinweise über den LayoutInflater findet ihr hier.

Mit Hilfe des rootView-Objekts können wir nach unserem ListView suchen. Dies tun wir in Zeile 48 mit der Anweisung rootView.findViewById(R.id.listview_aktienliste), die uns den gesuchten ListView zurückliefert. Wir speichern das ListView-Objekt in der Variable aktienlisteListView ab.

In Zeile 49 binden wir den ArrayAdapter an den ListView. Somit wird der ListView mit den, im Array, hinterlegten Daten gefüllt. Als Letztes geben wir in Zeile 51 das rootView-Objekt an die aufrufende Methode zurück.

In Android Studio sollte die MainActivityFragment.java Klassendatei nun wie folgt aussehen:

android bind listview

Nach ListView suchen und ArrayAdapter an ListView binden

Mit dieser letzten Änderung ist unser Android Projekt ausführbar und kann von uns auf dem Handy, Smartphone oder Tablet getestet werden. Außerdem können wir unsere Anwendung auch in dem Android Emulator ausführen und ausgiebig testen. Dies werden wir alles im nächsten Abschnitt vornehmen.

6. Ausführen unserer Android App auf dem Handy, Smartphone oder Tablet sowie im Android Emulator

Nach all den Änderungen möchten wir nun unsere Android App testen. Wir werden die Anwendung im Emulator und auf einem Android Gerät ausführen. Beginnen werden wir mit dem Android Emulator.

6.1 Starten der App im Android Emulator

Zuerst wollen wir sie im Android Emulator laufen lassen. Dazu klicken wir auf das Run 'app'-Symbol in der oberen Menüleiste. Siehe die folgenden beiden Abbildungen:

android studio project avd run

Android App über das Run App-Symbol starten

Jetzt wird unser Projekt erstellt und anschließend öffnet sich der Select Deployment Target-Dialog. Wir wählen unser Android Virtual Device aus, welches wir in Teil 2 des Android Tutorials erstellt hatten (Das AVD muss vorher im AVD Manager gestartet werden), und klicken abschließend auf den OK-Button.

Siehe folgende Abbildung:

android studio project avd choose

Auswählen des AVDs auf dem die App ausgeführt werden soll

Nun installiert Android Studio automatisch unsere App auf dem ausgewählten AVD (Android Virtual Device). Sobald die Installation abgeschlossen wurde, startet Android Studio unsere App auf dem AVD:

android app emulator avd

Unsere App mit dem ListView und Aktiendaten zum Test auf dem Android Virtual Device

6.2 Starten der App auf einem Android Gerät

Damit wir unsere App auf dem Smartphone oder Tablet starten können, müssen alle Schritte von Teil 3 des Android Tutorials befolgt worden sein.

Zuerst schließen wir unser Android Gerät an den PC an und stellen eine Verbindung über die ADB (Android Debug Bridge) her. Danach klicken wir auf das Run 'app'-Symbol in der oberen Menüleiste. Siehe folgende Abbildung:

android studio project avd run

Android App über das Run App-Symbol starten

Nach einigen Momenten öffnet sich der Select Deployment Target-Dialog. In ihm nehmen wir die folgenden Einstellungen vor:

  1. Das angeschlossene Android Gerät unter Connected Devices auswählen.
  2. Mit einem Klick auf den OK-Button die Installation unserer App auf das Gerät starten.
android device run app

Auswählen des angeschlossenen Android Geräts zum Aufspielen unserer App

Der Dialog schließt sich und unsere Android App wird auf das angeschlossene Gerät übertragen und installiert. Die Installation dauert nur einen kurzen Augenblick und verläuft fast unbemerkt im Hintergrund. Danach wird unsere App automatisch gestartet.

Die folgende Abbildung zeigt unsere App AktieHQ auf dem Android Gerät:

android app smartphone

Unsere App mit dem ListView auf dem Smartphone

Wir sollten nun eine Aktienliste als ListView mit den hinterlegten Finanzdaten sehen. Die Liste ist scrollbar und rotierbar. Andere Benutzereingaben werden noch nicht erfasst.

Zusammenfassung

In diesem Teil unseres großen Android Tutorials haben wir ListView, ArrayAdapter und XML-Layout Elemente näher kennengelernt.

Um eine scrollbare Liste dynamisch auf dem Android Gerät anzuzeigen, waren folgende Schritte notwendig:

  1. Definieren des Haupt-Layouts des Fragments in der fragment_main.xml Layout-Datei.
  2. Definieren des Layouts der Listenelemente in der list_item_aktienliste.xml Layout-Datei.
  3. Erzeugen von Beispieldaten (mock data).
  4. Erstellen und Initialisieren eines ArrayAdapters für den ListView.
  5. Finden des ListView-Objekts in der View-Hierarchie und Binden des ArrayAdapters an den ListView.
  6. Ausführen der App auf dem Android Device und im Android Emulator.

Bisher arbeitet unsere AktieHQ-App nur mit ausgedachten Finanzdaten. Daher wird unser nächster Schritt sein, die App mit echten Aktiendaten zu versorgen.



Comments 77

  1. Pingback: Android Tutorial: Eigene Android App installieren

  2. Pingback: Android Tutorial: Refactoring und Logging in Android Studio

  3. Pingback: Android Tutorial: Options Menu und Action Bar in Android

  4. Hallo,

    in oncreate() der Activity übergibst du ja die activity_main.xml als View daher wird das Fragment garnicht geöffnet sondern die main.xml. Wie öffent man es nun ?

    1. ansonsten sehr schöne Anleitung, ich kriege es nur nicht hin die listview anzuzeigen, er lädt bei mir immer die activity_main.xml beim start was mir auch logisch erscheint. Habe ich irgendwo was wichtiges übersehen ?

    2. Post
      Author

      Hallo Dennis,

      in der Methode onCreate() der Activity fügen wir das Fragment in die Activity ein mit:

      setContentView(R.layout.activity_main);
      if (savedInstanceState == null) {
                  getSupportFragmentManager().beginTransaction()
                          .add(R.id.container, new PlaceholderFragment())
                          .commit();
              }
      

      In der Methode onCreateView() des Fragments füllen wir den Bildschirm mit dem vorgegebenen Layout (fragment_main), das auch den ListView enthält:

      View rootView = inflater.inflate(R.layout.fragment_main, container, false);
      

      Bei den beiden Methoden muss man auf den Namen gut aufpassen. Die Methode der Activity heißt onCreate(), die Methode des Fragments heißt onCreateView().

      Wird dir der ListView mittlerweile angezeigt?

      Viele Grüße, Chris

    3. Hallo erst mal,

      finde dein Tutorial super verständlich.
      Habe aber noch eine Frage:
      Wo genau definiert man die Fragment Id, die du dann via R.id.container aufrufst?

      Danke

    4. Gelöst!
      Einmal als Fragment-Import folgendes genutzt:
      import android.support.v4.app.Fragment;
      Und die ID in activity-xml gesetzt!

    5. Hallo Alice,

      ich bin leider noch ein Anfänger und mir ist leider noch nicht so klar, wie du den Teil mit „die ID in activity-xml gesetzt!“ meinst

      wo genau muss ich die Variable „container“ initialisieren und mit welcher ID genau

    6. Post
      Author

      Hallo Alice,

      danke für das Lob!

      Schön, dass du das Problem lösen konntest.

      Viele Grüße, Chris

  5. Hallo,
    vielen Dank für das tolle Tutorial!
    Nach den oben genannten Schritten kommen bei die folgenden Fehlermeldungen.

    Error:(74, 13) error: cannot find symbol class List
    Error:(74, 50) error: cannot find symbol class ArrayList
    Error:(74, 68) error: cannot find symbol variable Arrays
    Error:(76, 13) error: cannot find symbol class ArrayAdapter
    Error:(77, 25) error: cannot find symbol class ArrayAdapter
    Error:(87, 13) error: cannot find symbol class ListView
    Error:(87, 44) error: cannot find symbol class ListView

    Könnt ihr mir sagen was bei mir schief gelaufen ist?

    VG
    Schlarf

    1. Post
      Author

      Hi Schlarf,

      vielen Dank für das Lob 🙂

      Schön, dass es jetzt funktioniert. Ich habe die Import-Anweisungen in dem Tutorial vergessen. Das werde ich bei der nächsten Überarbeitung berücksichtigen.

      Viele Grüße, Chris

    2. Hey,

      und was sind die fehlenden Komponenten?
      Bei mir kommen die gleichen Fehlermeldungen wie bei Schlarf.

      Des Weiteren habe ich seit der Projekterstellung nicht nur die MainActivity-Klasse sondern auch noch die MainActivityFragment-Klasse.
      Ist das normal?

      Ich denke, wenn ich die fehlenden Komponenten habe klappt es dann auch

      LG Daniel

    3. Post
      Author

      Hi Daniel,

      die fehlenden Import-Anweisungen sind:

      import android.widget.ArrayAdapter;
      import android.widget.ListView;
      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.List;
      

      Seit Android Studio 1 wird das Projekt automatisch mit der MainActivity-Klasse und der MainActivityFragment-Klasse erstellt. Ich habe das Tutorial damals mit Android Studio 0.8 erstellt, da war das noch anders. In den nächsten Wochen werde ich das überarbeitete Android Tutorial veröffentlichen, dann mit den beiden Klassen MainActivity und MainActivityFragment.

      Viel Erfolg mit der App!

    4. Hi Chris,

      habe die Import-Dateien gerade eben gefunden 😀

      Ah okay gut klingt logisch 🙂

      Vielen Dank für die schnelle Antwort

      LG Daniel

  6. Pingback: Android Tutorial: Das SwipeRefreshLayout in Android

  7. Hallo!

    Zuerst ein Lob für dieses tolle Tutorial.

    Ich bin bis zum letzen Punkt (Teil 4) ohne Probleme gekommen, aber jetzt hänge ich bei Punkt
    6.1 Starten der App im Android Emulator fest.

    Nach Run ‚app‘ erhalte ich eine Fehlermeldung in der Klasse: MainActivityFragment

    error: cannot find symbol variable list_item_aktienliste_textview

    auch ist der Eintrag:

    R.id.list_item_aktienliste_textview, // ID des TextViewsrot markiert.

    In der list_item_aktienliste.xml ist folgendes enthalten:

    android:id=“@+id/list_item_aktienliste_textview“>

    Vielleicht kann mir jemand einen Tip geben, wo der Fehler liegt.

    Danke,
    Jürgen

    1. Post
      Author

      Hallo Jürgen,

      dein, im Kommentar beschriebener, Quelltext sieht eigentlich korrekt aus. Wenn du möchtest, kannst du mir die beiden Quelltexte (MainActivityFragment.java und list_item_aktienliste.xml) per E-Mail zuschicken und ich schaue mal drüber. Die E-Mail findest du im Impressum.

      Viele Grüße, Chris

    2. So wie es aussieht habe ich den gleichen/ähnlichen Fehler.
      list_item_aktienliste_textview
      in Abschnitt 4 wird rot markiert (cannot resolve symbol)
      Was kann ich tun?
      PS: Von mir ebenfalls ein Danke für deine Arbeit
      MfG

  8. Hallo!

    tolles tutorial.
    aber bei mir funtioniert etwas mit der Ressourcen-Variable R nicht, das „R“ wird als Fehler angezeigt.
    hab ich da igentetwas übersehen.

    Danke,
    fion

    1. Post
      Author

      Hallo Fion,

      Danke für dein Feedback!

      Mit deiner Ressourcen-Variable R scheint etwas nicht zu stimmen. Die wird von Android Studio generiert und sollte automatisch gefunden werden.

      Ich hatte dieses Problem noch nicht, aber es gibt eine Menge Lösungsvorschläge bei Google Suche und StackOverflow.

      Der folgende Link führt zur Google Suchanfrage: android studio r cannot be resolved to a variable

      Ich hoffe da ist eine Lösung für dein Problem dabei. Vielleicht kennt auch ein Leser eine mögliche Lösung für das Problem.

      Viele Grüße, Chris

  9. Hey,

    beim Ausführen habe ich nur den grauen Bildschirm und ich bekomme nach einer Weile die Meldung „AktieHQ angehalten“. Hier wäre noch die zugehörige Fehlermeldung. Ich habe jetzt wirklich nach einer Lösung gesucht aber bin leider zu keinem Ergebnis gekommen.

    Grüße

    1. Post
      Author

      Hi Christoph,

      ich habe die zugehörige Fehlermeldung gelöscht, da sie riesig war. Wenn du möchtest, kannst du mir deine Projektdateien per E-Mail zusenden. Ich werde dann mal drüber schauen, vielleicht kann ich den Fehler finden. Die E-Mail Adresse kannst du im Impressum nachschauen.

      Viele Grüße, Chris

    2. Hey Chris,

      vielen Dank für deine Hilfe. Es war ja wirklich ein ärgerlicher Fehler.
      Fehleranalyse ist bei jeder Programmiersprache sehr wichtig, jedoch lernt man dies mit der Zeit.

      Grüße

  10. Hey cooles tutorial erstmal, aaaaber ich habe ein Problem ich Will meine Liste so dastehen haben :

    Bla bla 1. 12
    Bia blablub 2. 12

    Wie bekomme ich es einfach hin das die „12“ am ende der Zeile steht ohne Leertaste benutzen zu müssen haha da die Wörter links mal mehr oder weniger Zeichen haben muss ich immer wieder mal mehr oder weniger Leerzeichen setzten Beispiel

    Bla bla1. 12
    Bla blubbb. 12
    Blub 12

    Ich hoffe es ist verständlich was ich meine haha

    1. Post
      Author

      Hallo Florian,

      danke für das Lob!

      In einem TextView ist es nicht möglich den Text gleichzeitig links und rechts anzuordnen. Wer das möchte, wird wohl mit 2 TextViews nebeneinander arbeiten müssen. Dann ist es aber komplizierter die Liste auszugeben.

      In folgendem Tutorial wird schön gezeigt, wie so etwas gemacht wird (dort sind die TextViews untereinander):

      http://www.survivingwithandroid.com/2012/10/android-listview-custom-adapter-and.html

      Ich hoffe der Link hilft dir bei deinem Projekt weiter.

      Viele Grüße, Chris

  11. Hallo,

    danke für das tolle Tutorial.

    Trotzdem habe ich noch ein Frage, kann man neben den Texten noch unterschiedliche Bilder anzeigen lassen ?

    Mit freundlichem Gruß

    Mario

    1. Post
      Author

      Hallo Mario,

      Danke für Dein Lob!

      Das Anzeigen von Bildern neben den Texten ist möglich, indem man einen Custom Adapter für den ListView erstellt. Der Quellcode wird dadurch aber etwas komplexer.

      Hier wird schön, leider aber etwas kurz, beschrieben, wie man so etwas in Android macht:

      http://www.vogella.com/tutorials/AndroidListView/article.html

      Ich hoffe, der obere Link hilft Dir bei deinem Android Projekt weiter!

      Viele Grüße, Chris

  12. Soweit funktioniert es zwar, aber ich kann noch nichts mit der Liste machen.
    Scrollen funktioniert. Aber was ist mit „rotierbar“ gemeint.
    Ich kann also scrollen und alle Einträge sehen. Aber wenn ich einen Eintrag
    anklicke passiert nichts. Wie kann man also auf einen gewünschten Eintrag zugreifen?

    1. Post
      Author

      Hallo Rolf,

      das wird alles der Android App in den weiteren Teilen des Android Tutorials hinzugefügt. In Teil 10 behandeln wir Activities und Intents und fügen dem ListView einen OnItemClickListener hinzu, mit dessen Hilfe wir auf Klicks reagieren können.

      Viele Grüße, Chris

  13. Hallo,
    so langsam fängt es an zu „kribbeln“, auch diese App läuft problemlos im Emulator und auf meinem Samsung GALAXY GT-S6310N.
    Viele Grüße
    Manfred

  14. Hey Chris,

    soweit ist das Tutorial super einfach nachzumachen und es funktioniert auch dementsprechend.
    Aber ich bin hier ohne Vorkenntnisse und einfach nur alles abschreiben lehrt mich ja nichts über dieses Thema, ich hätte mir mehr Erklärungen zu den einzelnen Schritten und Zeilen gewünscht.
    Vielleicht habe ich ja auch einfach irgendwas überlesen.

    Grüße Julian

    1. Post
      Author

      Hallo Julian,

      danke für Dein Feedback. Ich werde es für weitere Tutorials berücksichtigen. Vom Abtippen allein lernt man leider nicht programmieren, aber es hilft dabei einen Einstieg zu finden und dann selbständiger weiter zu lernen.

      In den weiteren Teilen des Android Tutorials wird deutlich mehr erklärt. Besonders in Teil 15 über den Activity Lifecycle von Android.

      Viele Grüße, Chris

  15. Hallo Chris,

    erstmal vielen Dank für dieses Tutorial, ist echt sehr ausführlich und hilfreich!

    Ich habe eine Frage zu Punkt 3 (Mock Data):
    Wo genau müssen wir denn den Array und die ArrayList anlegen?

    Grüße

    1. Post
      Author

      Hallo Janos,

      das geschieht alles in Punkt 3. Wie im Bild dort dargestellt (blaue Markierung 2 und 3).

      Der String-Array aktienlisteArray wird in der Methode onCreateView() der MainActivityFragment-Klasse angelegt. Direkt danach wird das ArrayList-Objekt aktienListe mit der folgenden Anweisung erstellt:

      List <String> aktienListe = new ArrayList<>(Arrays.asList(aktienlisteArray));
      

      Dabei wird der aktienListe der String-Array im Konstruktor übergeben.

      Ich hoffe meine Erklärungen helfen Dir weiter.

      Viele Grüße, Chris

    2. Hallo,

      danke für die schnelle Antwort.
      Bei mir kam eine Fehlermeldung bzgl. der ArrayList, das Problem ist aber jetzt behoben.
      Wahrscheinlich hatte ich einfach einen Schritt vergessen.

      Grüße

  16. Hallo!

    Das Tutorial finde ich sehr hilfreich und verständlich!
    Allerdings habe ich eine Frage zum type-cast, nämlich öffnet sich das Programm auf meinem Handy und
    stürzt dann mit der Meldung „Muss leider beendet werden“ ab.
    In Android Studio 2.1.2 erhalte ich die Meldung „Unexpected Cast to ListView“ bei folgendem CodeFragment:

    ListView aktienlisteListView = (ListView) rootView.findViewById(R.id.listview_aktienliste);

    Nun meine Frage, worin liegt der Fehler?
    Ich bedanke mich im voraus für die Antwort!

    Grüße

    1. Post
      Author

      Hallo Peter,

      hmmm, schwer zu sagen ohne den gesamten Quellcode.

      Wenn Du möchtest, kannst Du mir Deine Projektdateien (den ganzen Android Studio Projektordner) als ZIP per E-Mail zusenden. Die E-Mail Adresse kannst Du im Impressum finden. Ich schaue dann mal, ob ich den Fehler finden kann.

      Viele Grüße, Chris

    1. Post
      Author
  17. Ich bekomme folgende Meldung:

             --------- beginning of crash
    08-14 22:17:24.900 2565-2565/de.programmierenlernenhq.aktiehq.app E/AndroidRuntime: FATAL EXCEPTION: main
    Process: de.programmierenlernenhq.aktiehq.app, PID: 2565
    android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class TestView
    at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    ...
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class TestView
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
    ...
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.TestView"
    
    1. Post
      Author

      Hallo Jonas,

      es scheint ein Tippfehler in einer der XML-Layout Dateien zu sein. Schick mir doch die drei XML-Dateien aus dem layout Ordner. Ich werde dann mal schauen, ob ich den Fehler finde. Meine E-Mail Adresse findest Du im Impressum.

      Viele Grüße, Chris

    2. Habe den fehler gefunden ich hatte ein Leerzeichen zu wenig
      Ich hatte:

      Richtig ist:

      Also mir fehlte ein leerzeichen vor dem <List View
      Er hat die 3 android.. dinger dann nicht als untergruppe gesehen.

  18. Bitte vorherigen Kommentar löschen.
    Weiß nicht wie sich diese NULL eingeschlichen hat. 😀

    Aber eins möchte ich noch hinzufügen.
    (Außer ich habe auch das übersehen).

    In deinem Tutorial steht nichts drin, dass man den alten „return“ mit dem neuen „return rootView“ ersetzen muss.

    1. Post
      Author

      Hallo Waldemar,

      das mit dem Ersetzen der return-Anweisung steht kurz vor der entsprechenden Abbildung. Ist nur ein kleiner Satz und kann daher sehr leicht überlesen werden. Ich musste selbst danach suchen. Hier der Wortlaut: „Den Quellcode fügen wir für die return-Anweisung am Ende der onCreateView-Methode ein.“

      Viele Grüße, Chris

  19. Danke für das tolle Tutorial, leider wird es je länger es geht, immer ungenauer und somit schwerer zu verstehen. Ein paar zusätzliche Anmerkungen, oder etwas veränderter Text würde hier wunder wirken. Ein Beispiel:
    Teil 4 Punkt 3: „Erzeugen der Beispieldaten (mock data)“

    Bisher:
    „Dieses Problem können wir lösen, indem wir einfach Beispieldaten (mock data) von Hand anlegen.

    Da unser ListView-Objekt später einmal eine Liste von Aktien und relevante Daten anzeigen soll, erzeugen wir einen String-Array mit Beispieldaten, der echte Finanzdaten nachbilden soll.

    Wir legen das Array aktienlisteArray vom Typ String wie folgt an:“

    Neu:
    „Dieses Problem können wir lösen, indem wir einfach Beispieldaten (mock data) von Hand anlegen.

    Da unser ListView-Objekt später einmal eine Liste von Aktien und relevante Daten anzeigen soll, erzeugen wir einen String-Array mit Beispieldaten, der echte Finanzdaten nachbilden soll.

    Dazu öffnen wir die Klasse MainActivityFragment.Java und legen das Array aktienlisteArray vom Typ String innerhalb unserer public View mit folgendem Inhalt an:“

    Ich musste mir den Text mehrmals durchlesen um herauszufinden das die MainActivityFragment.Java hierfür geöffnet werden muss und keine neue Datei erstellt werden sollte.
    Ich werde mal alle schwierigen Stellen aufzuschreiben, was das Problem war und wie es evtl gelöst werden kann. Falls es jemanden interessiert, kann er die Datei unter diesen Link einsehen:
    https://drive.google.com/open?id=1hzwP0CkAWNnIGIOwiyfCUU60K6cuDajSbs75cioEzQE
    Lg Stormy

    1. Post
      Author

      Hallo Stormy,

      danke für deinen nützlichen Hinweis! Ich habe mir dein verlinktes Dokument angesehen. Es ist jetzt schon sehr umfangreich und bestimmt hilfreich für den ein oder anderen Leser. Wenn du möchtest, kann ich es auf der Tutorial Hauptseite verlinken.

      Viele Grüße, Chris

    2. Wenn du mir deine Mailaddresse gibst (am besten gmail) dann kann ich dir auch Schreibrechte einräumen

      Lg Stormy

  20. Hallo zusammen,

    wenn ich auf ausführen klicke bekomme ich keine Fehlermeldung, er öffnet die App, aber die Liste ist nicht zusehen, man sieht einfach nur den weißen Background, hat jemand eine Idee was falsch gelaufen sein könnte?

    MFG
    Hugo

    1. Post
      Author

      Hallo Hugo,

      das Problen kann man am besten im Quellcode finden. Wenn du möchtest, kannst Du mir deine MainActivityFragment.java Klassendatei per E-Mail zusenden. Die E-Mail Adresse kannst Du im Impressum finden. Ich schaue dann mal, ob ich etwas herausfinden kann.

      Viele Grüße, Chris

  21. Irgendwie funktioniert es bei mir nicht. Es zeigt an dass R nicht definiert sei und noch weitere Fehler bei Main Aktivity Fragment. was soll das bedeuten?

    1. Post
      Author

      Hallo Kathi,

      wenn die Ressourcenvariable R nicht aufgelöst werden kann, dann liegt das meist an einem Tippfehler in einer Ressourcendatei (also den .xml Dateien). Um den Lesern zu helfen, habe ich mir früher den Quellcode der Leser angesehen. Das würde ich auch jetzt noch gerne tun, aber im Moment fehlt mir dazu leider die Zeit. Sorry 🙁

      Viele Grüße, Chris

  22. Hi Chris,

    habe bisher sehr viel Freude an deinem Tutorial. Ist wirklich Klasse.
    Funktioniert bisher auch alles einwandfrei sowohl auf dem Emulator, als auch auf meinem Handy.

    Nun habe ich allerdings eine Frage/Problem(?):
    Ich habe jetzt die App nach dem einfügen aller Code Blöcke auf dem Emulator gestartet. Sie startet auch ohne Probleme, allerdings wird mir mein Hello World Text nicht mehr angezeigt. (Und ich so Waaaaaaaaas? :D)
    Hab schon gedacht ich hätte die Zeile vllt. ausversehen rausgelöscht (Dummheit ist menschlich), aber nee, die Zeile steht immer noch da wie ne eins.
    Verstehe nun nicht woran das liegen kann. In den Schritten davor war die Meldung sowohl auf Emu, als auch auf meinem Handy da.

    Auch wenn hier schon länger nichts mehr gefragt bzw. geschrieben wurde, hoffe ich du kannst dich erbarmen und mir einen Hinweis geben 😉

    Danke schon mal 😉

    1. Post
      Author

      Hallo Stefan,

      momentan kann ich mich aus Zeitgründen leider kaum den Kommentaren widmen, daher kommt meine Antwort so spät 🙁

      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 etwas herausfinden kann.

      Viele Grüße, Chris

  23. Hallo zusammen,
    bin schon seit einigen Tagen am verzweifeln, was dies anbelangt… Ich habe zwar inzwischen die meisten Fehler bei mir behoben (hoffe ich jedenfalls), dennoch bekomme ich es nicht hin, in die onCreateView Methode von der verlinkten Java-Klasse des Fragments zu kommen…

    1. Post
      Author

      Hallo Wolkenfarmer,

      wird in Android Studio eine Fehlermeldung ausgegeben?

      Viele Grüße, Chris

  24. Vielen Dank für das sehr ausführliche und gut beschriebene Tutorial. Werde mich jetzt zur nächsten Lektion begeben und hoffen, dass ich auch dieses verstehe 🙂

    1. Post
      Author

      Hallo Michael,

      vielen Dank für’s Lob und viel Spaß mit dem Tutorial!

      Viele Grüße, Chris

  25. Hallo zusammen,
    zuerst mal ein dickes Lob zu den Tutorials :-0
    Habe Die Anleitungen Schritt für Schritt durchgemacht, allerdings habe ich den Teil der übertragung auf das Smartphone ausgelassen und wollte bis hier hin, das Programm im Emulator laufen lassen. Leider erhalte ich die Meldung Unfortunately, AktieHQ has stopped. Bekomme unmengen von Fehlermedlungen im Android Monitor:

    02-23 16:41:19.785 8766-8766/de.programmierenlernenhq.aktiehq.app E/AndroidRuntime: FATAL EXCEPTION: main
    Process: de.programmierenlernenhq.aktiehq.app, PID: 8766
    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
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    

    Weiß jemand weiter?

    grüße Ilona

    1. Post
      Author

      Hallo Ilona,

      es sieht nach einem Tippfehler in einer XML-Datei aus.

      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 etwas herausfinden kann.

      Viele Grüße, Chris

  26. Hallo,

    meine App funktioniert im Hochformat einwandfrei. Sobald ich mein Handy allerdings rotiere, beendet sich die App und es wird „Leider wurde AktieHQ beendet.“ ausgegeben.

    Wo liegt hier der Fehler bei mir oder habe ich eine Kleinigkeit vergessen?
    Vielen Dank für die Hilfe.

    LG Lukas

    1. Post
      Author

      Hallo Lukas,

      ohne Quellcode ist die Fehlerursache schwer zu lokalisieren. 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 etwas herausfinden kann.

      Viele Grüße, Chris

      Update: Der Fehler konnte behoben werden. Die Ursache waren zwei alternative Layout-Ordner (layout-port, layout-land) die sich in das Android Studio Projekt von Lukas eingeschlichen hatten. Nachdem diese beiden Ordner gelöscht wurden, funktionierte die App wie erwartet.

  27. Hey

    Auch dir erstmals Danke für das Erstellen des richtig guten Tutorials – genau so etwas habe ich gesucht!

    Ich habe deine Anleitung Schritt für Schritt befolgt, allerdings will es mir in der App die Liste nicht anzeigen. Die App läuft ohne Probleme, Fehlermeldungen gibt es im Android Studio auch keine.

    Lediglich das ‚(listView) rootView.findViewById(R.id.listview_aktienliste)‘; wird bei mir rot unterstrichen angezeigt – aber erst, wenn ich das Wort ‚listview_aktienliste‘ eingefügt habe.

    Kann mir echt keinen Reim darauf bilden, kannst du mir helfen?

    Liebe Grüsse, MrHarrison

  28. Bin auch in den Fehler gelaufen, dass nur eine leere Activity angezeigt wurde. Der Fehler lag bei mir in der Datei „fragment_main.xml“
    Ich hatte noch das Layout drin, was das Android Studio erzeugt hat, nämlich

    android.support.constraint.ConstraintLayout

    Mit dem FrameLayout (wie oben auch beschrieben) läuft es.

  29. Hallo,

    bisher hat alles in deinem Tutorial geklappt, aber jetzt gibt es ein Problem. Wenn ich in der MainActivityFragment.java die Java Packages (import java.util.ArrayList, usw.) importiere kommt ‚unused import statement‘.

    1. Post
      Author

      Hallo Harald,

      gut wenn Du es lösen konntest 🙂

      Viel Spaß und Erfolg noch mit dem Tutorial,
      Chris

  30. 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

  31. 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

  32. 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

  33. 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

Schreibe einen Kommentar

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