我有一个片段,对于屏幕旋转,我想保存一些我拥有的状态
@Override
public void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
bundle.putSerializable("myList", myList);
bundle.putString("test", "test");
}
为了保存我需要的数据,我可以在调试器中看到至少调用了代码然后获取我拥有的数据
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
if(savedInstanceState != null)
{
//do something
}
else
{
//do something else
}
}
但在这里,我总是以 if 语句的 else-brach 结尾。我不知道为什么它是空的。谢谢。
编辑 根据第一个答案更改了代码加上:
旋转屏幕时,我在调试器中看到:
- onSaveInstanceState 被调用
- onCreate 被调用 --> bundle != null
- 再次调用 onCreate(为什么?)--> bundle = null
- onCreateActivity 被调用 --> bundle = null
编辑 2 我发现了关于标签的类似帖子,它们在哪里分离,这就是为什么它被调用两次。我不得不承认我还没有完全理解这些帖子......但它可能与此有关。在我的活动中,我有以下代码
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
OverviewFragment of = new OverviewFragment();
FragmentTransaction tof = getFragmentManager().beginTransaction();
tof.replace(R.id.frag_overview, of);
DetailFragmentInitial df = new DetailFragmentInitial();
tof.replace(R.id.frag_details, df);
tof.commit();
}
并且可能不得不以某种方式改变它......但我不确定......如果我仅在 savedInstaceState 为空时执行片段事务,那么它似乎可以工作。但我不确定我以后是否会遇到不同的问题。有人对此有一些背景知识吗?