-1

我正在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

我也知道你不能保存二维数组,我知道解决方法。我真的很想知道如何保存扩展按钮的对象

4

2 回答 2

1

你为什么要强制转换mDataParcelable

savedInstanceState.putParcelable("test", (Parcelable) mData);

Tile[][] mData是一个二维数组,这不是Parcelable它本身,而是它的内容myTile=mData[0][1]

savedInstanceState.putParcelable("test", myTile);

请阅读有关 OOP 概念的更多信息。

于 2015-05-25T15:30:47.473 回答
1

当您尝试保存 mData 时,您实际上并没有使用 Parcelable 接口。

您可能想要做的是将二维数组放在实现 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();
    }
}
于 2015-05-25T15:51:59.153 回答