-1

私はアンドロイドスタジオでマインスイーパゲーム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 にキャストできません

また、2次元配列を保存できないことも知っており、回避策も知っています。ボタンを拡張するオブジェクトを保存する方法を知りたい

4

2 に答える 2

1

mData を保存しようとしているときに、実際には Parcelable Interface を使用していません。

あなたがしたいことは、Parcelable を実装するラッパー内に 2 次元配列を置くことです。

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 に答える
1

なぜあなたはとしてキャストしようとしてmDataParcelableますか?

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

Tile[][] mDataは 2 次元配列であり、これはParcelableそれ自体ではありませんが、その内容は say になりますmyTile=mData[0][1]

savedInstanceState.putParcelable("test", myTile);

OOP の概念の詳細をお読みください。

于 2015-05-25T15:30:47.473 に答える