文章就着重介绍婚恋相亲系统开发的自定义View该怎样保存与恢复状态,因为每个自定义View都是不同的情况,所以我们一般需要重写View的onSaveInstanceState()或onRestoreInstanceState()方法来实现我们需要的逻辑。
红娘相亲交友系统开发,红娘相亲交友分销模式系统开发,红娘相亲交友下单app系统开发,红娘相亲交友返佣模式开发,红娘相亲交友分销系统平台开发,红娘相亲交友平台定制开发,红娘相亲交友分销模式介绍,红娘相亲交友平台开发。
那么本文的核心就是讨论怎样重写上面两个方法来保存或恢复我们需要的数据。
自定义View的状态保存
我们知道,当Activity调用了onSaveInstanceState方法后,便会对它的ViewTree进行保存,而进一步对每一个子View调用其onSaveInstanceState()方法来保存状态。
我们在不知道该怎样下手的时候,可以参考一下Android源码,因为它有很多Widget是继承自View的,也就是Android系统自身的“自定义View”,我们可以看看它们的onSaveInstanceState()方法是怎样写的,说不定可以启发我们的思路。
这里笔者选取一个比较简单的控件:CheckBox,它的功能不用笔者多说了。它继承自CompoundButton,直接看CompoundButton#onSaveInstanceState:
onSaveInstanceState()方法返回Parcelable对象,也即是序列化对象,是Android提供的一种序列化方式。
我们回到上面的源码,首先调用了super.onSaveInstanceState()方法来获取一个Parcelable对象,接着把superState传递进SavedState的构造方法,构建了一个SavedState,并且设置SavedState的checked属性为当前isChecked()方法的返回值,也即把状态保存在SavedState里面,并且返回SavedState。所以说SavedState是一个实现了Parcelable接口的类,我们来看看:
该SavedState继承自BaseSaveState,有一个成员变量checked,这就是婚恋相亲系统开发需要保存的自定义View的状态了,而且SavedState的结构与实现Parcelable接口的类的结构基本是一样的,也就是说SavedState的父类必然实现了Parcelable接口,所以我们如果需要保存婚恋相亲系统开发的自定义状态,我们可以仿照CompoundButton,在自定义View内实现一个静态内部类SavedState,并继承自BaseSavedState,这样就能得到一个Parcelable对象了。
当然,你也可以直接写一个类实现Parcelable接口来保存状态,这样一般也是可以的。接下来举一个自定义View的例子。这个例子是笔者之前制作的一个自定义View:BannerViewPager,之前并没有考虑状态保存的事情,导致每次旋转屏幕后都回到了初始状态,这次利用学到的状态保存的知识,为该自定义View加上保存状态的功能。
逻辑还算是比较简单的,关键在于onSaveInstanceState()方法内把需要的数据放进SavedState即可,而SavedState是继承自BaseSavedState,我们根据需要添加新的属性即可,比如这里笔者添加了currentPosition属性,并在相应的SavedState(Parcel)和writeToParcel(Parcel,int)方法内对该属性进行了操作,只要了解Parcelable即可轻松实现。