Wir schreiben gerade eine App mit 4 Tabs: Karte, Personen, Orte, Ereignisse. Die Personen, Orte und Ereignisse in der App werden als Symbole auf der Karte angezeigt. Standardmäßig zeigen die Registerkarten "Personen", "Orte" und "Ereignisse" jeweils eine Listenansicht an, die benutzerdefiniert dargestellt wird und alle Personen, Orte und Ereignisse anzeigt.Android - Tabs, MapView, Aktivitäten innerhalb der Registerkarten
alt text http://web6.twitpic.com/img/37202700-f92052dc474b74e1760edda1c47f6940.4adcb134-scaled.png
jetzt, gerade jetzt jede der Laschen hat als Inhalt eine Absicht Satz die entsprechende Aktivität zu starten. Zum Beispiel gibt es eine MapTabActivity, die MapActivity erweitert, eine ShowPeopleListActivity, die die Personen anzeigt, und so weiter.
Ich sehe eine lotofStackOverflowquestions/Antworten sagen, dass aufgrund verschiedener Einschränkungen in der Art und Weise der TabHost Setup ist, dann ist es am besten nicht Aktivitäten wie der Inhalt von Tabs zu verwenden. Zum Beispiel ist es unmöglich, eine neue Aktivität zu starten und sie an die Stelle der bestehenden Aktivität auf einer Registerkarte setzen zu lassen, während es möglich ist, eine Ansicht mit einer anderen Ansicht zu wechseln.
Jetzt bin ich an einer Kreuzung. Wir haben (im Guten wie im Schlechten) eine Menge Zeit darauf verwendet, diese App so zu gestalten, wie sie derzeit strukturiert ist, mit den Aktivitäten als Inhalt der Registerkarten. Wenn auf ein Symbol geklickt wird, das einer Person, einem Ort oder einem Ereignis entspricht, wird eine VIEW-Absicht für einen diesem Objekt entsprechenden URI ausgelöst. Dies wird von einer Aktivität übernommen, die dann das Objekt anzeigt. Derselbe Mechanismus ist sowohl in der Karte als auch in den einzelnen Listen wirksam. Wir mögen die lockere Verbindung, die uns das bietet; Wir geben einfach einen VIEW-Befehl und den URI an die Person/den Ort/das Ereignis und es bringt uns automatisch zur richtigen Aktivität. Zugegeben, die gestartete Aktivität verdeckt die Tab-Ansicht, anstatt darin zu erscheinen, aber wir waren bereit, damit zu leben.
Hier ist ein Problem: Von der Show-Aktivität wollen wir zurück zur Karte gehen können, zentriert auf diese Person, Ort oder Ereignis. Wir können eine neue Aktivität starten, um die Karte erneut anzuzeigen, aber jetzt haben wir die Kartenaktivität als Inhalt der Registerkarte, plus die Showaktivität sowie die neue Kartenaktivität im Aktivitätsstapel; Angesichts der ressourcenintensiven Kartenaktivitäten ist das nicht der ideale Weg.
Ich denke, meine Frage ist, gibt es ein gutes Tutorial irgendwo genau zeigen, wie komplexe Aufgaben mit einem TabHost zu tun? Ich habe HelloTabWidget gesehen; Ich suche etwas, das viel ausgeklügelter ist als das. Ich bin besorgt, dass, wenn wir auf die View-basierte Art und Weise der Dinge gehen, müssen wir eine Menge Haushalt zu tun, um alle zurück Ereignisse abfangen, versuchen, die Ansichten usw., etc., sowie stark unser Programm auf eine Weise koppeln, die wir nicht wollen.
Alle Vorschläge für einen Weg nach vorne würden sehr geschätzt werden. Wir sind neu in Android, daher versuchen wir, den etablierten Best Practices zu folgen, aber es ist schwierig, wenn die wenigen Beispiele, die wir gesehen haben, für unseren Anwendungsfall zu einfach sind.
OK, ich sehe Ihren Punkt, dass, wenn wir alle Intents auf die gleiche Weise eingerichtet haben und die Show-Aktivität gestartet wird, die Back-Events genau gleich behandelt werden. Also ich denke, die wahre Komplexität (und die Back-Event-Schmerz) wäre, wenn wir den Inhalt der Registerkarten anstelle der gestarteten Absichten programmatisch auswechselten. Z.B. Die Registerkarte Personen, auf der normalerweise eine Personenliste angezeigt wird, wird aufgefordert, zu einer Personenansicht zu wechseln, wenn auf eine bestimmte Person geklickt wird. In diesem Fall müssten wir uns selbst mit dem Stapel von Ansichten befassen. – I82Much
Wie kann man auch eine Karte innerhalb einer Registerkarte haben, ohne eine Aktivität als Inhalt einer Registerkarte zu haben? Ist das möglich? – I82Much
w/r/t Ihren ersten Kommentar, ja, Sie müssten Ihr eigenes Stack-Management tun. w/r/t deinen zweiten Kommentar, ja du kannst AFAIK. Machen Sie Ihre Hauptaktivität zu einer MapActivity und nicht zu einer TabActivity. Das einzige, was TabActivity für Sie erledigt, ist der Aufruf von setup() automatisch auf Ihrem TabHost, was Sie dann selbst tun müssen, bevor Sie TabSpecs hinzufügen. Dann gibt MapActivity Ihnen, was Sie brauchen, um die Karte in einen Tab zu setzen. Es ist möglich, dass es hier Probleme gibt, aber aus dem Stegreif denke ich sollte es OK funktionieren. – CommonsWare