2010-03-12 68 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); 
相关问题