New und Hot Posts einbauen und Navigation einrichten - Eine Android App für die Steem Blockchain - Teil #21

in #development7 years ago (edited)

Im letzten Teil ging es um die Integration der "Trending" Ansicht auf Basis der bereits zuvor erstellten getDiscussionsByTrending Methode, im heutigen Teil möchte ich daher passend dazu die "New" Ansicht auf Basis der getDiscussionsByCreated Methode und die "Hot" Ansicht auf Basis der getDiscussionsByHot Methode fertigstellen. Anschließend möchte ich den soweit schon fertigen Teil ins Navigationsmenü integrieren und testen.

Schritt 1: Die Layouts

Da sich diese Seiten bis auf die IDs der einzelnen UI Komponenten nicht von der Trending Ansicht unterscheiden, kann auch das Layout 1 zu 1 übernommen werden. Anschließend müssen nur die IDs angepasst werden. Ich empfehle für die IDs Appweit ein eindeutiges Schema zu verwenden. Ich orientiere mich daran, eine Bezeichnung bestehend aus Activity Name (bzw. bei zum Beispiel der Postvorlage dem "Funktionsnamen" ("postpreview")) und einer Bezeichnung für den durch diese UI Komponente dargestellten Inhalt (z.B. "username", "avatar", etc.). Im folgenden die Layouts für alle drei Seiten:
trending.PNGctrend.PNG
(Trending)
new.PNGcnew.PNG
(New)
hot.PNGchot.PNG
(Hot)
Wie man sehen kann besteht der einzige Unterschied in den IDs. Nachdem also nun das Layout für beide neuen Ansichten fertig ist, geht es mit den Klassen weiter.

Schritt 2: Die Klassen

Auch hier gibt es im Prinzip keinen Unterschied zur Trending Ansicht. Wie auch bei dieser wird ein Tag, bzw. ein leerer String für alle Tags, übergeben. Anhand dieses Tags werden dann die Posts mit den bereits erstellten Methoden geladen und angezeigt. Da sich dieser Prozess bis auf die IDs und den Methodenaufruf für die API nicht von der Trending Ansicht unterscheidet, kann hier der Quellcode 1 zu 1 übernommen werden. Die wichtigste Änderung ist im Folgenden für alle drei Ansichten dargestellt:
ptl.PNG
(Trending)
pnewl.PNG
(New)
phl.PNG
(Hot)

Schritt 3: Einbindung im Menü

Als letzten Schritt müssen vor dem Test noch alle drei Ansicht ins Navigationsmenü integriert werden. Da das Navigationsmenü in allen Activities das gleiche ist, lohnt es sich, den OnNavigationItemSelectedListener nur einmal in Form einer neuen Klasse zu implementieren. Diese neue Klasse nenne ich "NavigationItemListener". SIe speichert durch den Konstruktor den Drawer, der geschlossen werden soll, sowie die Activity, in der sich ebendieser befindet. In der "onNavigationItemSelected" Methode wird dann durch einen Switch entschieden, welche Activity gestartet werden soll. Dies wird dann durch eine weitere Methode umgesetzt, die auch einige Sonderfälle überprüft und gegebenenfalls anders reagiert. Die Switch Konstruktion sieht so aus:
switchnavopener.PNG
Wie man sieht sind noch nicht alle Menüfelder auch mit Activities belegt, da noch nicht alle Activities existieren. Die Aufgerufene "openActivity" Methode reagiert in folgenden Fällen etwas anders:

  1. Aus der MainActivity in die MainActivity: Hier passiert nichts.
  2. Aus einer anderen Activity in die MainActivity: Hier muss keine neue Activity gestartet werden, da die MainActivity immer auf der untersten Ebene Aktiv ist.
  3. Aus einer nicht MainActivity: Die aufrufende Activity wird beendet.

Ansonsten erzeugt die Methode, wie schon bei den Post- und Accountaufrufen gezeigt, einen Intent und startet mit zuvor gespeichertem Parameter die aufzurufende Activity. Diese Methode sieht mit allen Überprüfungen so aus:
openactivity.PNG
Damit sind nun auch die neuen Activities aufrufbar. Als nächstes möchte ich mich dann mit dem Thema "Promoted Posts & Post Promoting" beschäftigen.


Wenn dir der Post gefallen hat und du die Reihe unterstützen möchtest, kannst du dies durch einen Upvote tun.