Android工作室保存扩展Button的数据

时间:2015-05-25 15:13:42

标签: android arrays parcelable state-saving

我正在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数组,我知道这些工作。我真的想知道如何保存一个扩展按钮的对象

2 个答案:

答案 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();
    }
}