1

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

所以我使用onSaveInstanceState来存储选定的选项卡索引并在onCreate上重新选择它。这适用于方向变化。但是,如果我启动另一个活动(假设是首选项屏幕)并从中返回,则保存的实例状态在onCreate上始终为 null ,即使已调用 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);
    }
}
4

2 回答 2

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);
    }
}
于 2012-08-02T20:05:44.430 回答
1

你在做什么很好。

可能令人困惑的一件事是,从 Activity A 启动 Activity B 并不能保证 onSaveInstanceState 将被调用。操作系统根据活动 A 是否可能在活动 B 期间被破坏来做出此决定。

所以你真的有两种情况需要考虑:

情况1

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

案例2

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

有关更多说明,请参阅onSaveInstanceState 的文档。

于 2012-08-02T19:23:27.783 回答