使用选项卡从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);
}
}
将您的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);
}
}
啊拍,当然。所有花哨的碎片让我忘记了基本知识。谢谢一堆。相同错误454. – ohra 2012-08-02 20:14:13
漂亮的侦探@Eric,击中了头部。 – 2012-08-02 20:43:43
你是做什么的代码是好的。
可能令人困惑的一件事是,从Activity A启动Activity B并不能保证onSaveInstanceState将被调用。操作系统使得基于是否活动A可能活动B.期间被破坏这一决定
所以,你只有两种情况考虑:
案例1个
- 活性A被暂停
- onSaveInstanceState不叫
案例2
- 活性A被暂停
- 的onSaveInstanceState叫
见docs for onSaveInstanceState更多的解释。
这就是我最初怀疑的。但我一直在调试器上运行应用程序,onSaveInstanceState肯定会在我启动B时在Activity A上调用。 – ohra 2012-08-02 19:34:11
在这种情况下,您是否在onSaveInstanceState中调用超类?即super.onSaveInstanceState(outState);另外,你确定当你返回到活动A时,onCreate被调用吗? – 2012-08-02 19:36:58
我尝试了超级和没有超级,同样的结果。当使用操作栏向上导航时,会调用onCreate。 (请参阅上面的讨论)使用后退按钮时,不会调用它。但在这种情况下,制表符状态正常。 – ohra 2012-08-02 19:59:27
当您从“活动”返回时,您不必重新选择所选的选项卡。从“活动”返回后,它应该保持选中状态。 – Eric 2012-08-02 19:11:18
至少当我还在做ActionBar/Fragment之前的东西并使用TabHost时,情况就是如此。但现在看来并非如此。 – ohra 2012-08-02 19:35:58
有趣...你如何结束'活动'?只需通过后退按钮或“完成()”?这两种方法都让我回到'ViewPager'的保存选项卡。 (我假设你正在使用?) – Eric 2012-08-02 19:37:07