使用选项卡从FragmentActivity启动另一个活动是错误的吗?

问题描述:

我有一个SherlockFragmentActivity在其选项卡中有两个SherlockFragments。当然,我希望保持当前选定的选项卡在方向更改上处于活动状态,并且当用户从其中任一片段启动的活动中返回时。使用选项卡从FragmentActivity启动另一个活动是错误的吗?

于是我就用的onSaveInstanceState存储选择的选项卡索引并重新选择它的onCreate。这适用于方向更改。但是,如果我启动另一个活动(假设首选项屏幕)并从中返回,则即使已调用onSaveInstanceState,保存的实例状态始终为空onCreate

所以我想问题是,我只是在这个错误的方式去。如果我使用片段,我只能使用一个活动,并将所有子屏幕作为片段?

或者还有一些其他原因,为什么我的保存的实例状态在活动更改之间消失?

编辑:从活动B

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      Intent intent = new Intent(this, MainActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(intent); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
+0

当您从“活动”返回时,您不必重新选择所选的选项卡。从“活动”返回后,它应该保持选中状态。 – Eric 2012-08-02 19:11:18

+0

至少当我还在做ActionBar/Fragment之前的东西并使用TabHost时,情况就是如此。但现在看来并非如此。 – ohra 2012-08-02 19:35:58

+0

有趣...你如何结束'活动'?只需通过后退按钮或“完成()”?这两种方法都让我回到'ViewPager'的保存选项卡。 (我假设你正在使用?) – Eric 2012-08-02 19:37:07

将您的onOptionsItemSelected代码更改为以下代码。 finish()结束Activity而不是重新启动它下面的那个。

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      finish(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
+0

啊拍,当然。所有花哨的碎片让我忘记了基本知识。谢谢一堆。相同错误454. – ohra 2012-08-02 20:14:13

+0

漂亮的侦探@Eric,击中了头部。 – 2012-08-02 20:43:43

你是做什么的代码是好的。

可能令人困惑的一件事是,从Activity A启动Activity B并不能保证onSaveInstanceState将被调用。操作系统使得基于是否活动A可能活动B.期间被破坏这一决定

所以,你只有两种情况考虑:

案例1个

  • 活性A被暂停
  • onSaveInstanceState不叫

案例2

  • 活性A被暂停
  • 的onSaveInstanceState叫

docs for onSaveInstanceState更多的解释。

+0

这就是我最初怀疑的。但我一直在调试器上运行应用程序,onSaveInstanceState肯定会在我启动B时在Activity A上调用。 – ohra 2012-08-02 19:34:11

+0

在这种情况下,您是否在onSaveInstanceState中调用超类?即super.onSaveInstanceState(outState);另外,你确定当你返回到活动A时,onCreate被调用吗? – 2012-08-02 19:36:58

+0

我尝试了超级和没有超级,同样的结果。当使用操作栏向上导航时,会调用onCreate。 (请参阅上面的讨论)使用后退按钮时,不会调用它。但在这种情况下,制表符状态正常。 – ohra 2012-08-02 19:59:27