2010-03-12 72 views
5

我有一個TabActivity。每個標籤指向一個子活動。這很好。在TabActivity的單個選項卡中重新啓動活動?

是否有任何聰明的方式來刷新其中一個活動標籤?例如,我只想「重新啓動」選項卡3中的活動。除了在刷新活動本身的支持方面進行構建,或者清除所有選項卡並重新創建所有選項卡之外,不確定是否有這樣做的好方法。

感謝,

回答

4

我沒有嘗試過這個自己,但通常你每一個人標籤的Activity使用LocalActivityManager訪問。這可以通過使用getLocalActivityManager()TabActivity中檢索。

看起來你應該能夠使用destroyActivity()startActivity()重新啓動的活動,雖然我不能完全肯定這是否會工作(因爲我已經沒有這樣做我自己)。需要注意的一點是,Activity的id將等同於您爲該選項卡設置的標籤(例如,您提供給TabHost.newTabSpec(String)的字符串)。

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

非常感謝Daniel,我會試試! – user246114 2010-03-13 16:19:21

+0

這會在'android.widget.TabHost.setCurrentTab()'行328處爲我生成一個'NullPointerException'。 – 2012-05-22 20:37:02

1

這裏是解決方案:

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

略多動態的解決方案:

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已棄用。 – Euthyphro 2013-04-22 01:21:54

+0

謝謝Euthyphro。這是一年半前寫的。有人已經提供了一個更好的答案?如果是這樣,哪一個? – juicedM3 2013-05-08 16:56:05

4

您可以通過設置標誌重新啓動活動。代碼如下。

spec = tabHost .newTabSpec("tab1") 
       .setIndicator("FirstActivity") 
       .setContent(new Intent(this,MyFirstActivity.class) 
       .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
tabHost.addTab(spec); 
相關問題