我有一个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);
}
}
答案 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
案例2
有关详细说明,请参阅docs for onSaveInstanceState。