2015-05-25 3 views
-1

Я работаю над мини-трейдером на андроид-студии. Что я пытаюсь сделать, так это сохранить состояние игры, если пользователь закрывает игру во время игры. м возникли проблемы с использованием parcelable на объект, который расширяет Button как это:Android-студия сохраняет данные, которые расширяются Кнопка

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 
}   

*Error:Inconvertible types;Cannot Cast GameActivity.Tiles to android.Parcelable

Я также знаю, что вы не можете сохранить 2d-массив, и я знаю о работе. Я действительно хочу узнать, как сохранить объект, который продлевает кнопку

ответ

1

Почему вы пытаетесь использовать mData как Parcelable?

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

Tile[][] mData является 2 двумерный массив, и это не Parcelable сам, но его содержание будет сказать myTile=mData[0][1].

savedInstanceState.putParcelable("test", myTile); 

Подробнее о концепции ООП читайте в разделе ООП.

1

Фактически вы не используете Parcelable Interface, когда пытаетесь сохранить mData.

Возможно, вы захотите сделать 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(); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^