2014-01-28 6 views
6

Kürzlich wurde ich beauftragt, eine App zu erstellen, die eher wie ein Buch ist. Das High-Level-Design bestand aus ein paar Listenansichten, die Kapitel enthielten, und führte dann einen Drill-Down in eine Liste von Themen und dann auf eine Seite selbst durch. Es gab eine Reihe anderer Listenansichten, die Lesezeichen oder Textsuchergebnisse zeigten, und es gab eine beträchtliche Menge an Animation, wobei ein Fragment gleichzeitig und ein anderes verschoben wurde. Dies war meine erste Verwendung von Fragmenten und obwohl sie zuerst eine gute Verkapselung eines Stücks UI-Funktionalität zu sein scheinen, kann ich nicht umhin, sich zu fragen, ob ihre Verwendung, wie in meinem Fall, zu "fetten" Aktivitätsklassen führt mehrere verschiedene Fragmente und müssen mehrere Schnittstellen implementieren, die sie veröffentlichen.Führen Fragmente zu Fettaktivitäten?

Als Beispiel zeigt das von einer Aktivität implementierten Schnittstellen:

public class NodeListActivity extends Activity implements 
     NodeListFragment.OnItemSelectedListener, 
     SearchListFragment.OnItemSelectedListener, 
     NodeFragment.OnLinkSelectedListener, 
     OnCloseSelectedListener, 
     OnActionBarItemSelectedListener, 
     OnBookmarkSelectedListener 

Bei älteren Versionen von Android, würde ich für jeden Hauptbildschirm/Funktion eine separate Aktivität angelegt hat. Ist das ein Code-Geruch oder führt die Kombination mehrerer Fragmente und Animationen zu fetten Aktivitäten?

Antwort

8

führt die Kombination mehrerer Fragmente und Animationen zu fetten Aktivitäten?

Ja. Dies wird jedoch häufiger und daher weniger stinkend.

Was ist etwas stinkend ist, dass die loooooooooooooooooooong Liste der Schnittstellen. :-)

Für etwas so Komplexes, können Sie feststellen, dass die Verwendung eines Ereignisbusses (Square's Otto, greenrobots EventBus oder sogar LocalBroadcastManager) ein sauberer Ansatz ist. Anstatt Fragmente verwenden eine Schnittstelle, um ihre Hosting-Aktivität über ein Ereignis (das ist meine Vermutung über die Quelle aller Ihrer Schnittstellen), kann das Fragment ein Ereignis auf dem Bus, die die Hosting-Aktivität abonnieren abonnieren können. Dies fügt zwar einen kleinen Overhead für die Laufzeit hinzu, bietet aber den Vorteil, alle Schnittstellen zu vermeiden. Es kann auch auf andere Komponenten erweitert werden, z. B. auf einen Dienst, der ein Ereignis posten kann, wenn im Hintergrund etwas passiert, über das die UI-Schicht (falls vorhanden) informiert werden muss.

+0

Danke. Ich schätze das Feedback sehr. Ich werde mir den Event-Bus ansehen. –