Next:
Impressum
Kotlin
1
Impressum
2
Einführung
2.1
Geschichte und Entwicklung von Kotlin
2.2
Kotlin Versionen
2.3
Überblick über Kotlin und seine Eigenschaften
3
Installation und Einrichtung der Entwicklungsumgebung für Kotlin
3.1
Schritt 1: Auswahl der IDE
3.2
Schritt 2: Installation von IntelliJ IDEA
3.3
Schritt 3: Einrichtung von Kotlin in IntelliJ IDEA
3.4
Schritt 4: Installation des JDK
3.5
Schritt 5: Konfiguration des JDK in IntelliJ IDEA
3.6
Schritt 6: Erstellen eines neuen Kotlin-Projekts
3.7
Schritt 7: Testen der Installation
3.8
Zusätzliche Schritte für die Android-Entwicklung
4
Grundlegende Syntax und Struktur von Kotlin-Programmen
4.1
Variablendeklaration
4.2
Grundlegende Datentypen
4.3
Kontrollstrukturen
4.4
Funktionen
4.5
Klassen und Objekte
4.6
Ausnahmebehandlung
4.7
Null-Sicherheit
4.8
Lambda-Ausdrücke und Higher-Order Functions
4.9
Übungsaufgaben
4.9.1
Variablendeklaration
4.9.2
Grundlegende Datentypen
4.9.3
Kontrollstrukturen
4.9.4
Funktionen
4.9.5
Klassen und Objekte
4.9.6
Ausnahmebehandlung
4.9.7
Null-Sicherheit
4.9.8
Lambda-Ausdrücke und Higher-Order Functions
4.10
Musterlösungen
4.10.1
Variablendeklaration
4.10.2
Grundlegende Datentypen
4.10.3
Kontrollstrukturen
4.10.4
Funktionen
4.10.5
Klassen und Objekte
4.10.6
Ausnahmebehandlung
4.10.7
Null-Sicherheit
4.10.8
Lambda-Ausdrücke und Higher-Order Functions
5
Grundlagen der Kotlin-Programmierung
5.1
Datentypen und Variablen in Kotlin
5.1.1
Grundlegende Datentypen
5.1.2
Unveränderliche und veränderliche Variablen
5.1.3
Typinferenz
5.1.4
Spezielle Datentypen
5.1.5
Null-Sicherheit
5.1.6
Smart Casts
5.2
Übungsaufgaben
5.2.1
Grundlegende Datentypen
5.2.2
Unveränderliche und veränderliche Variablen
5.2.3
Typinferenz
5.2.4
Spezielle Datentypen
5.2.5
Null-Sicherheit
5.2.6
Smart Casts
5.3
Musterlösungen
5.3.1
Grundlegende Datentypen
5.3.2
Unveränderliche und veränderliche Variablen
5.3.3
Typinferenz
5.3.4
Spezielle Datentypen
5.3.5
Null-Sicherheit
5.3.6
Smart Casts
5.4
Kontrollstrukturen in Kotlin: if, when, for, while
5.4.1
if-Anweisung
5.4.2
when-Anweisung
5.4.3
for-Schleife
5.4.4
while- und do-while-Schleifen
5.5
Übungsaufgaben
5.5.1
if-Anweisung
5.5.2
when-Anweisung
5.5.3
for-Schleife
5.5.4
while- und do-while-Schleifen
5.6
Musterlösungen
5.6.1
if-Anweisung
5.6.2
when-Anweisung
5.6.3
for-Schleife
5.6.4
while- und do-while-Schleifen
5.7
Funktionen in Kotlin: Definition, Parameter, Rückgabewerte und Named-Parameter
5.7.1
Funktionen definieren
5.7.2
Parameter in Funktionen
5.7.3
Rückgabewerte
5.7.4
Named-Parameter
5.7.5
Überladen von Funktionen
5.8
Übungsaufgaben
5.8.1
Funktionen definieren
5.8.2
Parameter in Funktionen
5.8.3
Rückgabewerte
5.8.4
Named-Parameter
5.8.5
Überladen von Funktionen
5.9
Musterlösungen
5.9.1
Funktionen definieren
5.9.2
Parameter in Funktionen
5.9.3
Rückgabewerte
5.9.4
Named-Parameter
5.9.5
Überladen von Funktionen
5.10
Klassen und Objekte: Grundkonzepte der Objektorientierung in Kotlin
5.10.1
Klassendefinition
5.10.2
Konstruktoren
5.10.3
Erzeugung von Objekten
5.10.4
Vererbung
5.10.5
Schnittstellen
5.10.6
Datenklassen
5.10.7
Objekte und Begleiterobjekte
5.11
Übungsaufgaben
5.11.1
Klassendefinition
5.11.2
Konstruktoren
5.11.3
Erzeugung von Objekten
5.11.4
Vererbung
5.11.5
Schnittstellen
5.11.6
Datenklassen
5.11.7
Objekte und Begleiterobjekte
5.12
Musterlösungen
5.12.1
Klassendefinition
5.12.2
Konstruktoren
5.12.3
Erzeugung von Objekten
5.12.4
Vererbung
5.12.5
Schnittstellen
5.12.6
Datenklassen
5.12.7
Objekte und Begleiterobjekte
6
Fortgeschrittene Konzepte
6.1
Erweiterte Klassenkonzepte in Kotlin: Vererbung, Abstraktion und Schnittstellen
6.1.1
Vererbung
6.1.2
Abstraktion
6.1.3
Schnittstellen
6.1.4
Mehrfachvererbung über Schnittstellen
6.2
Übungsaufgaben
6.2.1
Vererbung
6.2.2
Abstraktion
6.2.3
Schnittstellen
6.2.4
Mehrfachvererbung über Schnittstellen
6.3
Musterlösungen
6.3.1
Vererbung
6.3.2
Abstraktion
6.3.3
Schnittstellen
6.3.4
Mehrfachvererbung über Schnittstellen
6.4
Lambda-Ausdrücke und Higher-Order Functions in Kotlin
6.4.1
Lambda-Ausdrücke
6.4.2
Higher-Order Functions
6.4.3
Anwendung von Lambda-Ausdrücken und Higher-Order Functions
6.4.4
Vorteile
6.5
Übungsaufgaben
6.5.1
Lambda-Ausdrücke
6.5.2
Higher-Order Functions
6.5.3
Anwendung von Lambda-Ausdrücken und Higher-Order Functions
6.6
Musterlösungen
6.6.1
Lambda-Ausdrücke
6.6.2
Higher-Order Functions
6.6.3
Anwendung von Lambda-Ausdrücken und Higher-Order Functions
6.7
Collections in Kotlin: Listen, Sets und Maps
6.7.1
Listen in Kotlin
6.7.2
Sets in Kotlin
6.7.3
Maps in Kotlin
6.7.4
Operationen auf Collections
6.8
Übungsaufgaben
6.8.1
Listen in Kotlin
6.8.2
Sets in Kotlin
6.8.3
Maps in Kotlin
6.8.4
Operationen auf Collections
6.9
Musterlösungen
6.9.1
Listen in Kotlin
6.9.2
Sets in Kotlin
6.9.3
Maps in Kotlin
6.9.4
Operationen auf Collections
6.10
Null-Sicherheit und Exceptions in Kotlin
6.10.1
Null-Sicherheit
6.10.2
Sichere Aufrufe und der Elvis-Operator
6.10.3
Ausnahmebehandlung
6.10.4
Erzwungene Aufrufe (!!)
6.11
Übungsaufgaben
6.11.1
Null-Sicherheit
6.11.2
Ausnahmebehandlung
6.11.3
Erzwungene Aufrufe
6.12
Musterlösungen
6.12.1
Null-Sicherheit
6.12.2
Ausnahmebehandlung
6.12.3
Erzwungene Aufrufe
7
Kotlin für Android-Entwicklung
7.1
Einrichtung der Android-Entwicklungsumgebung für Kotlin
7.1.1
Installation von Android Studio
7.1.2
Konfiguration des Android SDK
7.1.3
Einrichtung eines Virtuellen Geräts
7.1.4
Erstellen eines neuen Android-Projekts mit Kotlin
7.1.5
Integration von Kotlin in Bestehende Projekte
7.2
Grundlagen der Android-App-Entwicklung mit Kotlin
7.2.1
Verständnis der Android-Architektur
7.2.2
Erste Schritte mit Kotlin in Android Studio
7.2.3
Implementierung einer einfachen Activity
7.2.4
Verwendung von Views und Layout-Komponenten
7.2.5
Daten- und Ereignisbehandlung
7.2.6
Debugging und Testing
7.3
Android-spezifische Konzepte: Activities, Fragments, Intents
7.3.1
Activities
7.3.2
Fragments
7.3.3
Intents
7.3.4
Integration dieser Konzepte
7.4
UI-Design mit XML und Kotlin in der Android-Entwicklung
7.4.1
Erstellung von Layouts mit XML
7.4.2
Interaktion mit UI-Elementen in Kotlin
7.4.3
Verwendung von View Binding
7.4.4
Layout-Inflater
7.4.5
Anpassungsfähiges UI-Design
7.5
UI-Design mit Jetpack Compose in der Android-Entwicklung
7.5.1
Einführung in Jetpack Compose
7.5.2
Grundkonzepte von Jetpack Compose
7.5.3
Erstellen einer einfachen Composable Funktion
7.5.4
Layouts in Compose
7.5.5
Interaktion mit dem Zustand
7.5.6
Vorteile von Jetpack Compose
8
Funktionale Programmierung in Kotlin
8.1
Grundlagen der Funktionalen Programmierung
8.1.1
Unveränderliche Daten (Immutability)
8.1.2
Funktionen als First-Class Citizens
8.1.3
Reine Funktionen
8.1.4
Deklarative statt Imperative Programmierung
8.1.5
Rekursion
8.1.6
Lazy Evaluation
8.2
Unveränderliche Datenstrukturen
8.2.1
Definition und Eigenschaften
8.2.2
Vorteile von Unveränderlichen Datenstrukturen
8.2.3
Anwendungsfälle
8.2.4
Umgang mit Unveränderlichkeit in Sprachen wie Kotlin
8.3
Funktionale Schnittstellen und deren Anwendung
8.3.1
Definition Funktionale Schnittstelle
8.3.2
Beispiele und Anwendung
8.3.3
Einsatz in Lambda-Ausdrücken und Methodenreferenzen
8.3.4
Vorteile Funktionaler Schnittstellen
9
Kotlin Coroutines und Asynchrone Programmierung
9.1
Einführung in Coroutines
9.1.1
Was sind Coroutines?
9.1.2
Grundkonzepte von Coroutines in Kotlin
9.1.3
Verwendung von Coroutines
9.1.4
Vorteile von Coroutines
9.1.5
Coroutine-Scopes und Kontext
9.2
Verwaltung von asynchronen Aufgaben und Prozessen
9.2.1
Futures und Promises
9.2.2
Callbacks
9.2.3
Async/Await
9.2.4
Coroutines in Kotlin
9.2.5
Reactive Programming
9.2.6
Event Loop und Non-Blocking I/O
9.2.7
Best Practices
9.3
Anwendungsfälle für Coroutines in der Praxis
9.3.1
Netzwerkanfragen
9.3.2
Datenbankoperationen
9.3.3
UI-Updates
9.3.4
Verarbeitung langer laufender Tasks
9.3.5
Zeitgesteuerte Aufgaben und Delays
9.3.6
Event-Handling und Zustandsmanagement
9.3.7
Parallelisierung von Aufgaben
9.3.8
Testing
10
Android Agenda
11
Überblick über Android
11.1
Architektur von Android
11.2
Entwicklung von Android-Apps
11.3
Von Dalvik nach ART: Der Kern der Android-Architektur
11.3.1
Die Funktionsweise der Dalvik Engine
11.3.2
Die Optimierung der Leistung
11.3.3
Übergang zur Android Runtime (ART)
11.4
Zusammenfassung
12
Einführung in Android SDK und ADT
12.1
Android Software Development Kit (SDK)
12.2
Android Development Tools (ADT)
13
Installation und Konfiguration von Android SDK und ADT
13.1
Installation von Android Studio und Android SDK
13.2
Konfiguration von Android Studio und Android SDK
13.3
Installation und Konfiguration von ADT (für Eclipse)
14
Überblick über die Tools und Funktionen
14.1
Android SDK
14.2
Android Studio
14.3
Entwicklung der ersten Android-App
14.3.1
Schritt 1: Installieren Sie Android Studio
14.3.2
Schritt 2: Starten Sie ein neues Android Studio-Projekt
14.3.3
Schritt 3: Verstehen Sie die Struktur Ihres Projekts
14.3.4
Schritt 4: Schreiben Sie Ihren ersten Code
14.3.5
Schritt 5: Erstellen Sie das Layout Ihrer App
14.3.6
Schritt 6: Testen Sie Ihre App
14.3.7
Schritt 7: Bauen und Bereitstellen Ihrer App
15
Manifest Datei
15.1
Struktur des Android-Manifests
15.2
Berechtigungen im Android-Manifest
15.3
Beispiel Manifest
16
Activities und deren Lebenszyklus
16.1
Activity
16.2
Fragment
16.3
Hauptmethoden des Lebenszyklus einer Activity
16.4
Weitere Lifecycle Hooks
16.5
Fragment-Lifecycle
16.6
Action-Lifecycle
17
Intents und Services
17.1
Intents
17.2
Services
17.3
Service Class und IntentService Class
17.4
Manifest
17.5
JobIntentService
17.6
Services stoppen
17.6.1
Ein Service stoppt sich selbst
17.6.2
Ein Service wird von einer externen Komponente gestoppt
18
Broadcast Receiver
18.1
Broadcast Receiver seit Oreo
18.1.1
Manifest-deklarierte Receiver
18.2
Dynamisch registrierte Receiver
19
Application-Context und seine Verwendung
19.1
Anwendungsfälle für den ApplicationContext:
19.2
Beispiele für die Verwendung des ApplicationContext:
19.2.1
1. Beim Arbeiten mit Singleton-Klassen
19.2.2
2. Beim Erstellen einer benutzerdefinierten Toast-Nachricht
19.2.3
3. Beim Arbeiten mit SharedPreferences
20
UI-Events und deren Behandlung
20.1
Klick-Events
20.2
Touch-Events
20.3
Tasten-Events
21
Layout Elemente und GUI Elemente
21.1
Layout Elemente
21.2
GUI Elemente
22
Toast-Nachrichten, Snackbar-Nachrichten und Dialog-Nachrichten in Android
22.1
Toast-Nachrichten
22.2
Snackbar-Nachrichten
22.3
Dialog-Nachrichten
23
Unterschied zwischen Editor und XML
23.1
XML
23.2
Visueller Layout-Editor
24
Einführung in das Debugging von Android-Anwendungen
24.1
Android Studio Debugger
24.2
Logcat
24.3
Lint
25
Entwicklung für verschiedene Geräte und Plattformen
25.1
Unterstützung für verschiedene Bildschirmgrößen und -auflösungen
25.2
Unterstützung für verschiedene Android-Versionen
25.3
Unterstützung für verschiedene Gerätetypen
26
Resourcen und Unterstützung mehrerer Sprachen in Apps
26.1
Schlüsselkonzepte und Schritte
26.1.1
1. Ressourcen Externalisieren
26.1.2
2. Strings.xml
26.1.3
3. Alternative Ressourcen
26.1.4
4. Verwendung von Ressourcen
26.1.5
5. Unterstützung für Rechts-nach-links-Sprachen
26.1.6
6. Formatierung von Zahlen und Daten
26.2
Zugriff auf String-Ressourcen aus dem Code
26.2.1
Definition in strings.xml
26.2.2
Zugriff im Code
26.2.3
Anwendung in der UI
27
Vorteile der Verwendung externer Bibliotheken
27.1
Wiederverwendung von Code
27.2
Schnellere Entwicklung
27.3
Best Practices
27.4
Community-Unterstützung
27.5
Erweiterte Funktionen
28
Integration und Verwendung in Android-Projekten
29
Multi-Threading in Android
29.1
Wichtige Konzepte und Techniken
29.1.1
Handler und Looper
29.1.2
AsyncTask (Veraltet seit API 30)
29.1.3
Java Threads und Runnables
29.1.4
Coroutines in Kotlin
29.1.5
WorkManager
29.2
Beispiel: Nutzung von Coroutines
29.3
Wichtige Hinweise
29.4
SQLite-Datenbank
29.4.1
Direkte Nutzung der SQLite-API in Kotlin
29.4.2
Room-Persistence-Bibliothek
29.4.3
Asynchrone Datenbankoperationen mit Coroutines
29.4.4
Best Practices
30
Dateisysteme in Android
30.1
Interner Speicher
30.1.1
Beschreibung
30.1.2
Dateizugriff
30.2
Externer Speicher
30.2.1
Beschreibung
30.2.2
Dateizugriff
30.3
Wichtige Hinweise
30.4
Best Practices
31
Bereitstellung im Google Play Store
32
Prozess des Signierens von Apps
33
Anhang
33.1
Installation JDK Windows
33.2
Installation Android Studio
33.3
Virtualisierung prüfen