2010-04-28 6 views
5

Während ich unter Android programmiert habe, schreibe ich eine Elternaktivität, die um einige andere erweitert wird. Ein bisschen wie ListActivity. Meine Elternaktivität erstreckt sich auf Activity. Wenn ich eine Map oder eine List verwenden möchte, kann ich meine Elternaktivität nicht als Oberklasse verwenden - die untergeordnete Aktivität kann nur eine Aktivität offensichtlich erweitern. Als solche schreibe ich am Ende meine Eltern Aktivitäten mit der gleichen Logik für Activity, ListActivity, MapActivity und so weiter.Designmuster zur Erweiterung der Android-Aktivitäten?

Wonach ich suche, ist eine Art Merkmalsfunktionalität/Entwurfsmuster, das in diesem Fall helfen würde. Irgendwelche Vorschläge?

Antwort

1

Ich habe eine Basis MyAbstractActivity extends Activity landete mit, die gemeinsam genutzte Logik enthält und eine MyAbstractListActivity extends MyAbstractActivity, die ahmt ListActivity (layout.R.id.list aufbläst, layout.R.id.empty, etc .; nicht viel los dort).

3

Ich mag nicht wirklich ListActivity, MapActivity usw. Grundsätzlich sind sie Aktivitäten, die einfach ein einzelnes Ansichtselement auf Kosten einiger Flexibilität hinzufügen. Durch Hinzufügen eines MapView oder ListView zu Ihrem XML-Code erhalten Sie das gleiche, was eine Activity abgeleitete Oberklasse direkt erweitern kann. Also benutze einfach keine dieser SomethingActivity-Klassen zum größten Teil.

+0

Es wird nicht nur eine Ansicht hinzugefügt. Je nachdem, welche Aktivität Sie verwenden, haben Sie den Map Lifecycle/Cursor-Handler und so weiter. Die Vorteile können die Unflexibilität nicht ausgleichen, aber ein gewisser Code wird definitiv durch Verwendung von prädisponierten Klassen gewonnen. – charroch

1

Ich verwende eine delegate mit allen gemeinsamen Funktionen. Dadurch kann ich alle gemeinsamen Funktionen in einer einzigen Klasse für alle verschiedenen Aktivitäten nutzen.
Alle meine Aktivitäten erweitern ihre spezielle Aktivität und implementieren dann eine gemeinsame Schnittstelle. Das Problem bei diesem Ansatz besteht darin, dass ich alle in der Schnittstelle definierten Methoden implementieren und die entsprechende Methode im Delegate-Objekt aufrufen muss. Dieser Code beläuft sich im Moment auf 30 doppelte Codezeilen und ich denke, das ist kein großes Problem.