我们有时候会发现,由竖屏切到横屏的时候,会出现问题,比如数据丢失,Fragemnt 重叠现象。这是由于横竖屏切换,OnCreate会重新走一遍。为了解决这个问题我们必须重写这个方法,并且保存数据在OnCreate里重新拿到。
protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); outState.putBoolean("changeScreen", true); Log.e(Tag, "-------onSaveInstanceState"); }在这里我们做横竖屏切换的时候,保存一个Boolean值,从而考虑在OnCreate怎么走逻辑,如下:
if (savedInstanceState == null) { Log.e(Tag, "-------onCreate--------"+savedInstanceState); }else{ Log.e(Tag, "-------onCreate--------"+savedInstanceState.getBoolean("changeScreen")); }
一个保存数据的x小Demo
我们通过一个ListView 中点击Checkbox 例子来学习如何在实战中,保存数据。我曾经写过一个Checkbox选中状态,滑动混乱的Demo,ListView中Checkbox点击,滑动状态混乱,比如我们切换横屏的话,之前选中的CheckBox 都不在显示,因为切换的时候OnCreate 重新创建了Adapter,不会再有被点击的记录,这个时候我们需要在Activity中重写
onSaveInstanceState,如下:
@Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); outState.putSerializable("select", checkBoxAdapter); }
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list = $(R.id.list); if(savedInstanceState == null) { checkBoxAdapter = new CheckBoxAdapter(getApplicationContext()); list.setAdapter(checkBoxAdapter); } else { checkBoxAdapter = (CheckBoxAdapter)savedInstanceState.getSerializable("select"); list.setAdapter(checkBoxAdapter); } }
横竖屏保存ListView数据。