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

时间:2012-08-02 18:56:16

标签: android android-fragments android-actionbar

我有一个SherlockFragmentActivity,其标签中有两个SherlockFragments。当然,我希望保持当前选定的选项卡在方向更改时保持活动状态,以及当用户从他们从任一片段启动的活动返回时。

所以我使用 onSaveInstanceState 来存储选定的标签索引,并在 onCreate 上重新选择它。这适用于方向更改。但是,如果我启动另一个活动(让我们说一个偏好设置屏幕)并从中返回,则保存的实例状态在 onCreate 上始终为空,即使已调用 onSaveInstanceState

所以我想问题是我只是走错了方向。如果我使用片段,我被迫只使用一个活动将所有子屏幕作为片段?

或者还有其他原因导致我保存的实例状态在活动更改之间消失了吗?

编辑:活动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);
    }
}

2 个答案:

答案 0 :(得分:2)

将您的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);
    }
}

答案 1 :(得分:1)

你做得很好。

可能令人困惑的一件事是从活动A启动活动B并不能保证根本不会调用onSaveInstanceState。操作系统根据活动B中是否可能销毁活动来做出此决定。

所以你真的有两个案例要考虑:

案例1

  • 活动A已暂停
  • onSaveInstanceState未被调用

案例2

  • 活动A已暂停
  • onSaveInstanceState被称为

有关详细说明,请参阅docs for onSaveInstanceState