最近写了一个自定义布局View,遇见了一个bug,记录自己踩的坑。
下面请大家看一下我的代码,View的存储与恢复部分代码,如下:
//这是保存数据代码
protected Parcelable onSaveInstanceState() {
Bundle bd = new Bundle();
bd.putParcelable(INSTANCE, super.onSaveInstanceState());
//存储一下状态 ,是否结束
bd.putBoolean(INSTANCE_GAMEOVER, isGameOver);
//存储一下 数组信息
bd.putParcelableArrayList(INSTANCE_WHITEARRAY, mWhiteArray);
bd.putParcelableArrayList(INSTANCE_BLACKARRAY, mBlackArray);
return bd;
}
下面是重启动当前View时,进行数据获取
protected void onRestoreInstanceState(Parcelable state) {
if (state instanceof Bundle) {
Bundle bd = (Bundle) state;
//获取 状态
isGameOver = bd.getBoolean(INSTANCE_GAMEOVER);
//获取 数组
mBlackArray = bd.getParcelableArrayList(INSTANCE_BLACKARRAY);
mWhiteArray = bd.getParcelableArrayList(INSTANCE_WHITEARRAY); super.onRestoreInstanceState(bd.getParcelable(INSTANCE));
return;
}
super.onRestoreInstanceState(state);
}
上面的这些主要代码都没有问题,但是我进行运行测试的时候,却发现这些代码竟然没有发挥作用,还是没有保存状态和获取数据信息。
这时你会觉得是不是代码写错了,怎么界面还不行,。这个时候其实不是代码问题了,是你的View布局文件没有设置ID。
必须设置ID,不要忘了,小伙伴们。
好了,今天的采坑记录就到这里!