我正在android studio上进行扫雷游戏。如果用户在玩游戏时关闭游戏,我想要做的就是保存游戏状态。我有在parcelable
扩展的对象上使用Button
时出现问题,如下所示:
private final Tile[][] mData = new Tile[8][8]; //8x8 grid
public class Tile extends Button implements Parcelable
{
private boolean isMine;
private boolean isFlag;
private boolean isCovered;
private int noSurroundingMines;
我知道我需要使用onSaveInstanceState
并使用Parcelable
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putParcelable("test", (Parcelable) mData); <--Error
}
*错误:不可转换的类型;无法将GameActivity.Tiles转换为android.Parcelable
我也知道你无法保存2d数组,我知道这些工作。我真的想知道如何保存一个扩展按钮的对象
答案 0 :(得分:1)
您为什么要将mData
投射为Parcelable
?
savedInstanceState.putParcelable("test", (Parcelable) mData);
Tile[][] mData
是一个二维数组,本身不是Parcelable
,但其内容可以说是myTile=mData[0][1]
。
savedInstanceState.putParcelable("test", myTile);
请阅读有关OOP概念的更多信息。
答案 1 :(得分:1)
当您尝试保存mData时,实际上并没有使用Parcelable接口。
您可能想要做的是将2d数组放在实现Parcelable的包装器中。
public class Minefield implements Parcelable
{
private Tile[][] mData;
public Minefield() {
mData = new Tile[8][8]
}
}
然后在主活动中,如果没有保存状态,则创建一个Minefield实例:
private final Minefield minefield;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
if (savedInstanceState != null) {
//do stuff with savedInstanceState
} else {
minefield = new Minefield();
}
}