自定义View的状态恢复
上面对婚恋相亲系统开发的自定义View的状态进行了保存,接下来我们就要恢复这些状态。既然有了已经保存的状态,那么恢复状态也很简单了,因为在onRestoreInstanceState(Parcelable)方法内,根据传递进来的Parcelable参数,我们可以拿到我们之前保存的数据,再根据需要进行赋值或者调用某些方法来恢复状态就行了。
红娘相亲交友系统开发,红娘相亲交友分销模式系统开发,红娘相亲交友下单app系统开发,红娘相亲交友返佣模式开发,红娘相亲交友分销系统平台开发,红娘相亲交友平台定制开发,红娘相亲交友分销模式介绍,红娘相亲交友平台开发。
比如说,CheckBox,之前保存的是是否选择了这个CheckBox的状态,那么恢复就应该对CheckBox重新选中或不选中。同样以BannerViewPager为例,重写onRestoreInstanceState(Parcelable)方法如下:
总结
从上面看出,婚恋相亲系统开发保存与恢复自定义View的状态并不能,核心在于onSaveInstanceState()方法、onRestoreInstanceState(Parcelable)方法以及SavedState的实现,当然了,SavedState不是必须继承自BaseSavedState的,我们完全可以自行实现Parcelable接口。
遇到的问题
再来谈谈笔者遇到的问题。如果按照上面所说的去做,婚恋相亲系统开发一般都能实现状态的保存与恢复。但是有时候遇到的某些特殊情况也会让人感到很困惑。
笔者曾继承了RecyclerView,对它的功能拓展,目的是添加HeaderView,这种情况很常见,比如ListView就可以添加HeadView。然后笔者把BannerViewPager作为HeaderView添加进RecyclerView里面,换句话说HeaderView是RecyclerView的一个子itemview。然而问题出现了,每次旋转屏幕后BannerViewPager的onSaveInstanceState()和onRestoreInstanceState(Parcelable)方法都不会被调用,而RecyclerView的是正常调用,也即是说,保存与恢复的事件并没有传递给BannerViewPager。
为了探究出现这个问题的原因,笔者开始查看RecyclerView的源码。从上一篇文章我们知道,保存状态的事件是从View#dispatchSaveInstanceState开始的,查看RecyclerView的源码,发现它重写了dispatchSaveInstanceState方法,即RecyclerView#dispatchSaveInstanceState。