2010-03-12 21 views
5

Ich habe eine TabActivity. Jeder Tab zeigt auf eine Unteraktivität. Das funktioniert großartig.Neustart einer Aktivität auf einer einzelnen Registerkarte in einer TabActivity?

Gibt es eine clevere Möglichkeit, eine der Aktivitätsregisterkarten zu aktualisieren? Ich möchte nur die Aktivität in Tab # 3 zum Beispiel "neu starten". Ich bin mir nicht sicher, ob es eine gute Möglichkeit ist, dies zu tun, sondern nur die Aktualisierungsunterstützung für die Aktivität selbst zu erstellen oder ALLE Tabs zu löschen und alle neu zu erstellen.

Danke,

Antwort

4

Ich habe das selbst nicht ausprobiert, aber in der Regel Zugriff auf Sie jede Activity die LocalActivityManager mit der einzelnen Registerkarten. Dies kann in einem TabActivity mit getLocalActivityManager() abgerufen werden.

Es sieht so aus, als ob Sie destroyActivity() und startActivity() verwenden können, um eine Aktivität neu zu starten, obwohl ich nicht genau weiß, ob das funktioniert (wie ich es selbst nicht getan habe). Es ist wichtig zu beachten, dass die id der Aktivität dem Tag entspricht, das Sie für die Registerkarte festgelegt haben (z. B. die Zeichenfolge, die Sie an TabHost.newTabSpec(String) übergeben haben). Hier

LocalActivityManager manager = getLocalActivityManager(); 
manager.destroyActivity("tab3", true); 
manager.startActivity("tab3", new Intent(this, ThirdTab.class)); 
+0

Awesome Dank Daniel, ich werde es versuchen! – user246114

+0

Dies erzeugt eine "NullPointerException" für mich bei 'android.widget.TabHost.setCurrentTab()' Zeile 328. –

1

ist die Lösung:

tabHost.setOnTabChangedListener(this); 
public void onTabChanged(String tabId) { 
     Log.d(LOG_KEY, tabId); 
     LocalActivityManager manager = getLocalActivityManager(); 
     manager.destroyActivity("ID_1", true); 
     manager.startActivity("ID_1", new Intent(this, YourMyActivity.class)); 
    } 
6

etwas dynamische Lösung:

LocalActivityManager manager = getLocalActivityManager(); 
String currentTag = tabHost.getCurrentTabTag(); 
Class<? extends Activity> currentClass = manager.getCurrentActivity().getClass(); 
manager.destroyActivity(currentTag, true); 
manager.startActivity(currentTag, new Intent(this, currentClass)); 
+0

LocalActivityManager ist veraltet. – Euthyphro

+0

Danke Euthyphron. Dies wurde vor eineinhalb Jahren geschrieben. Hat jemand schon eine bessere Antwort gegeben? Wenn ja, welcher? – juicedM3

4

Sie können die Aktivität neu starten, indem Flags. Der Code ist wie folgt.

spec = tabHost .newTabSpec("tab1") 
       .setIndicator("FirstActivity") 
       .setContent(new Intent(this,MyFirstActivity.class) 
       .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
tabHost.addTab(spec); 
Verwandte Themen