2010-07-16 11 views
15

Ich bin in der Konzeption/Design-Phase des Aufbaus einer App, und ich habe ein bisschen ein Haken getroffen. Im Wesentlichen war ich auf der Suche nach einer Möglichkeit, eine Aktivität in die Benutzeroberfläche eines anderen ähnlich wie eine TabHost/TabActivity einzubetten. Am oberen Bildschirmrand befindet sich ein Fenster, das die andere Aktivität enthalten würde. Darunter befinden sich Schaltflächen und Steuerelemente, die unabhängig von der oben genannten Aktivität sind und immer sichtbar sein sollten. Der Benutzer kann in dem Fenster von einer Aktivität zu einer anderen navigieren, ohne dass Änderungen an den folgenden Steuerelementen verursacht werden.Android: Verwenden von ActivityGroup zum Einbetten von Aktivitäten

Während ich das Problem betrachtete, lief ich über ActivityGroup, die aussah, als wäre es nützlich, aber wie würde ich es implementieren? Jeder hat Erfahrung mit ActivityGroup oder eine andere Idee?

Antwort

19

Ja, Sie würden eine ActivityGroup implementieren, die der Container Ihrer anderen Aktivitäten sein wird. Wenn der Benutzer auf eine der Schaltflächen klickt, erhalten Sie einen Verweis auf den LocalActivityManager und verwenden ihn zum Starten und Einbetten der inneren Aktivität. Etwas wie folgt aus:

LocalActivityManager mgr = getLocalActivityManager(); 

Intent i = new Intent(this, SomeActivity.class); 

Window w = mgr.startActivity("unique_per_activity_string", i); 
View wd = w != null ? w.getDecorView() : null; 

if(wd != null) { 
    mSomeContainer.addView(wd); 
} 

Hinweis, kann mit dieser Methode recht kompliziert sein, denn es sei denn, der Fokus ist genau richtig, um die Tasten Hardware drücken (wie die Menü-Taste) nur nur Ereignisse auf dem Activity auslösen statt der innere Aktivität. Sie müssen einen Weg finden, um die innere Aktivität zu fokussieren, nachdem Sie sie zur Containeransicht hinzugefügt haben. An diesem Punkt wird die gleichmäßige Aktivität in der inneren Aktivität ausgeführt und an die Containeraktivität weitergegeben.

Es kann getan werden, ich habe es getan ... und es funktioniert. Es ist nur ein bisschen komplizierter als ich denke, dass es sein sollte.

Wie dem auch sei, ich habe die meisten dieser Informationen durch am TabHost Code suchen, die here

+0

oh toll, ich suchte nach dem Tabhost-Quellcode. das sieht gut aus, aber es ist alles sehr neu für mich. möchten Sie erklären, was Sie in Ihrem Codebeispiel tun? – mtmurdock

+1

Der startActivity-Teil startet nur die Aktivität, ohne sie auf dem Bildschirm anzuzeigen. Dann erhalten Sie die Ansicht mit allen Inhalten und fügen sie zu einer Ansicht hinzu, die sich in Ihrer ActivityGroup befindet. LocalActivityManager verwaltet alles für Sie, wie das Senden onPause und onResume an Ihre inneren Aktivitäten, wenn Sie die Home-Taste drücken und so eine – synic

+0

noch eine Sache: Was ist das "Fenster" -Objekt und wie ist es implementiert? Kann ich einfach ein '' Tag in das Layout einfügen, wo ich es haben möchte und es dann im Code zuweisen? Danke, du bist großartig. – mtmurdock