Android: Wie man die Funktion der Aktivität innerhalb des Tabs vom Tabhost aufruft

7

Ich habe einen Tabhost mit drei Tabs. Jeder ist eine Aktivität. Ich hätte gerne eine Schaltfläche, die in der Aktionsleiste ist, die Leiste oben mit gemeinsamen Schaltflächen, Funktionen des Tabs aufrufen, die aktiv ist.

Zum Beispiel eine Add-Funktion, die zu jeder Registerkarte etwas anderes hinzufügen kann, je nachdem, welche Registerkarte vorhanden war, als Sie auf die Schaltfläche geklickt haben.

Also, ich frage, wie man eine Funktion in der Aktivität A aus dem TabHost.

Und wenn das nicht funktioniert, kann ich vielleicht die Datenbank vom Tabhost aktualisieren und dann den Tab-Inhalt aktualisieren. Wäre das einfacher?

Danke Ihnen allen für Ihre Zeit und Unterstützung.

    
trgraglia 16.03.2011, 00:24
quelle

4 Antworten

7

Hi Bin gerade darüber gestolpert, nicht sicher, ob du schon eine Lösung gefunden hast?

Ich habe das kürzlich selbst gelöst. Ich habe das Problem zuvor bereits gelöst, indem ich eine beabsichtigte Übertragung von der Tab-Host-Aktivität ausgelöst und die Übertragung innerhalb der Unter-Tab-Aktivität empfangen habe. Dies funktionierte für mich, aber ich war mir sicher, dass es einen "besseren" Weg gibt.

Ein sauberer Weg ist es, es mit so etwas zu erreichen:

könnte so etwas haben:

  • parentActivity - mein "Container" Aktivität, die den TabHost
  • enthält
  • childActivity - Meine Tab-Aktivität welche Tab-Inhalt und die öffentliche Methode, von der ich anrufen möchte %Code%

in parentActivity:

%Vor%

in childActivity:

%Vor%

Hinweis: Eine weitere Alternative, die ich glaube, ist das Redesign, um Ansichten anstelle von Aktivitäten in Ihren Tabs zu verwenden. Dies ist eine bessere Gesamtalternative, da IIRC speicherweise nur 1 Aktivität auf dem Stapel gespeichert wird und nicht ( parentActivity ) Anzahl der Aktivitäten

Ich hoffe, das hilft

    
wired00 28.05.2011, 05:45
quelle
13

Ich habe den folgenden Code innerhalb meiner TabActivity -Klasse verwendet, um zwischen den Tabs zu wechseln und dann eine öffentliche Methode aufzurufen, die in der Aktivität des Tabs definiert wurde:

%Vor%

Hoffentlich hilfreich für jemanden, der nach der Antwort auf diese Frage sucht.

    
Dan Kilpatrick 24.06.2011 14:52
quelle
0

Bearbeitet nach Peter O Anfrage:

Ich bin auf API 10 und dieses Problem hat mir große Kopfschmerzen bereitet. Ich habe 3 Tabs, ich möchte, dass alle auf Veränderungen aufmerksam werden. Das Problem, das ich hatte, war, dass, sobald die Aktivität für einen Tab gestartet wurde, kein Callback zu sein schien, so dass die Aktivität verstand, dass der Benutzer auf einen anderen Tab wechselte und somit arbeiten musste, um sicherzustellen, dass der Status korrekt war. p>

Ich habe viele Antworten auf dieses Problem gefunden, aber keine schien zu funktionieren.

Die eine, die ich endlich arbeiten ließ, war die Lösung, die als Nr. 3 für diesen Thread angeboten wurde - aber auch das ist verwirrend. Ich habe festgestellt, dass die getTabHost (). SetCurrentTab (0); tut nichts; Ich habe OnTabChangeListener () implementiert, um eine Funktion aufzurufen, die getTabHost () verwendet. SetCurrentTab (0); Ich fand jedoch die getTabHost (). setCurrentTab (0); Die Anwendung stürzte für alle anderen Registerkarten als 0 ab - wenn ich z. B. die Registerkarte B (Index = 1) wählte, dann getTabHost () genannt. setCurrentTab (1); Die App ist abgestürzt.

Mit dem Debugger habe ich den Aufruf this.getCurrentActivity (); gibt immer die Aktivität zurück, die mit der Registerkarte verknüpft ist, auf die der Benutzer geklickt hat, und ruft getTabHost () auf. setCurrentTab (); änderte diese Tatsache nicht und verursachte einen Absturz der App.

Also habe ich es losgeworden und kann jetzt this.getCurrentActivity () aufrufen und dann eine Methode in der Actvitity-Klasse aufrufen, die von diesem Aufruf zurückgegeben wird - dadurch weiß die Aktivität, dass sie ihren Status aktualisieren muss - in meinem Fall Dies geschieht über das Anwendungsobjekt.

    
Derwood Kirkwood 14.03.2012 20:36
quelle
0

Der obige Aufruf der Methode funktioniert nicht,

Hier ist die schnelle Antwort für das obige Problem:

getTabHost().setCurrentTab(0);

Activity myActivity=getCurrentActivity();

String name=((Tab1) myActivity).et1.getText().toString();

Hier ist der obige Code in der Methode onclick() der Aktivität angegeben, die TahHost hat Dabei ist Tab1 die zweite Aktivität und et1 ist die Identität des Editiertext in der Tab1-Aktivität, so dass Sie den gesamten Wert der verschiedenen Felder einzeln erhalten können.

    
user3346392 24.02.2014 11:17
quelle

Tags und Links