我有一個TabActivity。每個標籤指向一個子活動。這很好。在TabActivity的單個選項卡中重新啓動活動?
是否有任何聰明的方式來刷新其中一個活動標籤?例如,我只想「重新啓動」選項卡3中的活動。除了在刷新活動本身的支持方面進行構建,或者清除所有選項卡並重新創建所有選項卡之外,不確定是否有這樣做的好方法。
感謝,
我有一個TabActivity。每個標籤指向一個子活動。這很好。在TabActivity的單個選項卡中重新啓動活動?
是否有任何聰明的方式來刷新其中一個活動標籤?例如,我只想「重新啓動」選項卡3中的活動。除了在刷新活動本身的支持方面進行構建,或者清除所有選項卡並重新創建所有選項卡之外,不確定是否有這樣做的好方法。
感謝,
我沒有嘗試過這個自己,但通常你每一個人標籤的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));
這裏是解決方案:
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));
}
略多動態的解決方案:
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));
您可以通過設置標誌重新啓動活動。代碼如下。
spec = tabHost .newTabSpec("tab1")
.setIndicator("FirstActivity")
.setContent(new Intent(this,MyFirstActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
tabHost.addTab(spec);
非常感謝Daniel,我會試試! – user246114 2010-03-13 16:19:21
這會在'android.widget.TabHost.setCurrentTab()'行328處爲我生成一個'NullPointerException'。 – 2012-05-22 20:37:02