最近在继续iPhone 业务的同时还需要重新拾起Android 。在有些生疏的情况下,决定从Android 源码中感悟一些Android 的风格和方式。在学习源码的过程中也发现了一些通用的模式,希望通过一个系列的文章总结和分享下。 该模式在不破坏封装的情况下,捕捉一个对象的内部状态,这样就可以在之后恢复到该状态。对于Android来说,在横竖屏切换的时候就可能需要在切换前捕捉状态,这样在切换后就可以进行恢复。
以TimePicker为例,备忘录模式实现的类图如下: 其中,SavedState支持小时和分钟数的存储,这样就可以确保在一些关键节点前后保持状态一直。 主要代码如下: public class TimePicker extends FrameLayout { ......
/**
* Used to save / restore state of time picker
*/
private static class SavedState extends BaseSavedState { private final int mHour;
private final int mMinute; private SavedState(Parcelable superState, int hour, int minute) {
super(superState);
mHour = hour;
mMinute = minute;
}
private SavedState(Parcel in) {
super(in);
mHour = in.readInt();
mMinute = in.readInt();
} public int getHour() {
return mHour;
} public int getMinute() {
return mMinute;
} @Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeInt(mHour);
dest.writeInt(mMinute);
} public static final Parcelable.Creator<SavedState> CREATOR
= new Creator<SavedState>() {
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
} public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
}
@Override
protected Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
return new SavedState(superState, mCurrentHour, mCurrentMinute);
} @Override
protected void onRestoreInstanceState(Parcelable state) {
SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
setCurrentHour(ss.getHour());
setCurrentMinute(ss.getMinute());
}
......
}

更多相关文章

  1. android切换输入法工具类
  2. Android中shape的使用
  3. Android隐藏状态栏 全屏
  4. Android(安卓)7 强势来袭开发者们不得不知道的细节
  5. 详解 Android(安卓)的 Activity 组件 -
  6. Android中Activity启动模式launchermode和intent.addFlags
  7. Android知识体系总结
  8. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Fedora镜像
  9. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像

随机推荐

  1. Android os设备谎言分辨率的解决方案
  2. Android部分字体高亮
  3. Android SQLiteDatabase的使用
  4. Android 权限全集
  5. Android之快捷方式
  6. repo命令详解
  7. Android ProgressDialog
  8. android在Button上显示倒计时
  9. android中webviewjs与java的相互调用
  10. Android隐藏标题栏的四种方法