Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Android App Entwicklung: ESP Controller ansprechen #4 Fragmente für Seiten erstellen

Posted on 18. Februar 20193. Mai 2023 by Stefan Draeger

Im letzten Kapitel zur Reihe „ESP Controller ansprechen“ haben wir die Android App „ESPTutorialApp“ umgeschrieben so das wir eine Seitennavigation mit Icons haben. 

Seitennavigation für die AndroidApp "ESPTutorialApp"
Seitennavigation für die AndroidApp „ESPTutorialApp“

Nun möchten wir für die kommenden Seiten das Layout vorbereiten, das heißt das wir im Backend die Fragmente erstellen und die Layouts festlegen.

  • Was sind Fragmente?
  • Wie bindet man Fragmente ein?
    • Schritt 1 – erzeugen eines Fragments für die Startseite
    • Schritt 2 – Interface auslagern
    • Schritt 3 – weitere Fragmente für die Seiten erstellen
    • Schritt 4 – Seitenwechsel implementieren
  • Download
  • Fazit & Ausblick

Was sind Fragmente?

Mit Fragmenten können wir eine Seite in unser Android App gliedern. Vorallem können wir diese Fragmente wiederverwenden und haben somit einen größeren Benefit unser Arbeit.

Wie bindet man Fragmente ein?

Für das einbinden von Fragmenten benötigt man in der View einen Platzhalter. Dieses ist das FrameLayout. Initial wird dem FrameLayout ein Fragment übergeben welches beim starten der App angezeigt werden soll.

Schritt 1 – erzeugen eines Fragments für die Startseite

Zunächst erzeugen wir uns ein neues Fragment, hierzu navigieren wir über das Kontextmenü des Projektes „New“ > „Fragment“ > „Fragment (Blank)“.

neues Fragment "HauptseiteFragment" erzeugen
neues Fragment „HauptseiteFragment“ erzeugen

Dieses Fragment soll beim starten der App angezeigt werden und allgemeine Informationen zu der App und der Benutzung anzeigen.

Nun werden wir dieses Fragment in der View „content_navigation.xml“ definieren.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".NavigationActivity"
    tools:showIn="@layout/app_bar_navigation">

    <FrameLayout
        android:id="@+id/container"
        android:name="de.draegerit.esptutorialapp.HauptseiteFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

Damit dieses Fragment jedoch beim starten angezeigt wird, müssen wir dieses in der Methode „onCreate“ definieren.

Dazu legen wir uns ein neues Feld in der Klasse „NavigationActivity“ an.

Fragment hauptseiteFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
   ...
   hauptseiteFragment = new HauptseiteFragment();
   updateFragment(hauptseiteFragment);
   ...
}

Zusätzlich benötigen wir eine Methode um das Fragment auf der View zu wechseln, da wir diese Methode jedoch für jede Aktion in dem NavigationsMenü benötigen werden wir den Code in eine extra Methode auslagern.

private void updateFragment(Fragment fragment) {
   FragmentManager fragmentManager = getSupportFragmentManager();
   fragmentManager.beginTransaction()
      .replace(R.id.container, fragment)
      .addToBackStack(null)
      .commit();
}

Schritt 2 – Interface auslagern

Als nächstes muss man das interne Interface „OnFragmentInteractionListener“ aus der Klasse „HauptseiteFragment“ auslagern denn dieses wird für jedes Fragment welches wir für unsere App erzeugen benötigt.

Warum die Anwendung AndroidStudio dieses Interface für jedes Fragment neu erstellt ist mir unklar.

/**
* This interface must be implemented by activities that contain this
* fragment to allow an interaction in this fragment to be communicated
* to the activity and potentially other fragments contained in that
* activity.
* <p>
* See the Android Training lesson <a href=
* "http://developer.android.com/training/basics/fragments/communicating.html"
* >Communicating with Other Fragments</a> for more information.
*/
public interface OnFragmentInteractionListener {
   // TODO: Update argument type and name
   void onFragmentInteraction(Uri uri);
}

Des Weiteren werden wir in diesem Zuge die Klasse etwas aufräumen. Die Kommentare, Felder  und einige Methoden in der Klasse werden wir für dieses Tutorial nicht benötigen.

package de.draegerit.esptutorialapp;

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


public class HauptseiteFragment extends Fragment {

    private OnFragmentInteractionListener mListener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_hauptseite, container, false);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }
}

Zusätzlich müssen wir unser Klasse „NavigationActivity“ dieses neue Interface implementieren lassen.

...
public class NavigationActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener, OnFragmentInteractionListener {
...

Durch dieses einbinden des Interfaces müssen wir die Methode „onFragmentInteraction“ einbinden.

@Override
public void onFragmentInteraction(Uri uri) {}

Wenn wir diesen Schritt erledigt haben können wir nun unsere Anwendung bauen und installieren. Nun sollten Wir auf unser App den Text „Hello blank fragment“ sehen.

ESPTutorialApp erstes Fragment
ESPTutorialApp erstes Fragment

Schritt 3 – weitere Fragmente für die Seiten erstellen

Nun nachdem wir unser erstes Fragment für die Startseite eingebaut haben, wollen wir für jeden unserer Menüpunkte ein Fragment erstellen. (Hier verfahren wir wie bei der Hauptseite.)

D.h. wir erstellen für den Menüpunkt „fotoresistor“, „imprint“ und „privacy notice“.

Aus diesen neuen Klassen entfernen wir mindestens das Interface „OnFragmentInteractionListener“ denn wir haben dieses ja bereits ausgelagert.

Schritt 4 – Seitenwechsel implementieren

Wir haben nun für jeden unserer Menüpunkte und für die Hauptseite ein Fragment erzeugt. Um den Seitenwechsel zu vollziehen müssen wir die Methode „onNavigationItemSelected“ in der Klasse „NavigationActivity“ wiefolgt anpassen.

@Override
public boolean onNavigationItemSelected(MenuItem item) {
  int id = item.getItemId();
  if (id == R.id.nav_fotoresistor) {
     updateFragment(fotoresistorFragment);
  } else if (id == R.id.nav_imprint) {
     updateFragment(imprintFragment);
  } else if (id == R.id.nav_privacynotice) {
     updateFragment(privacyNoticeFragment);
  }

  DrawerLayout drawer = findViewById(R.id.drawer_layout);
  drawer.closeDrawer(GravityCompat.START);
  return true;
}

Wenn wir (bzw. der Benutzer der App) auf einen Menüpunkt klicken dann wird die Methode ausgeführt und wir erhalten zusätzlich das MenuItem welches ausgewählt wurde. Als erstes lesen wir von diesem MenuItem die ID, wenn zbsp. die ID gleich „R.id,nav_fotoresistor“ ist dann aktualisieren wir das FrameLayout und setzen das Fragment für den Fotowiderstand. Zum Schluss wird noch das Menü geschlossen. Wenn auf kein Menüpunkt geklickt wird (quasi auf eine freie Fläche) so passiert nichts.

Menüführung in der AndroidApp ESPTutorialApp
Menüführung in der AndroidApp ESPTutorialApp

Menüführung in der AndroidApp ESPTutorialApp

Zum starten des animierten GIF’s bitte auf das Bild klicken.

Download

Android App Entwicklung: ESP Controller ansprechen, Ausbaustufe 4Herunterladen

Fazit & Ausblick

Wir haben nun in diesem Tutorial die Seiten für den Fotowiderstand, das Impressum sowie für die Datenschutzerklärung angelegt. Als nächstes werden wir nun die Seite für den Fotowiderstand mit leben befüllen und uns die Daten auf einem Liniendiagramm anzeigen lassen.

2 thoughts on “Android App Entwicklung: ESP Controller ansprechen #4 Fragmente für Seiten erstellen”

  1. Jörg Boge sagt:
    3. Februar 2020 um 17:20 Uhr

    Echt tolle Tutorial!
    Wann kommt der nächste Teil?

    Antworten
    1. Stefan Draeger sagt:
      3. Februar 2020 um 19:38 Uhr

      Hi,

      der 5. Teil ist in arbeit jedoch sind mir so einige andere Beiträge dazwischen gekommen.
      Aber ich werde demnächst auch dort weiter machen.

      Gruß,

      Stefan Draeger

      Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen
Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

link zu Fabook
link zu LinkedIn
link zu YouTube
link zu TikTok
link zu Pinterest
link zu Instagram
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}