2017-02-19 4 views
-1

так что мое приложение, как это: mainActivity ->gameview>gamegenerationКак сохранить класс состояния?

mainActivity будет передавать информацию (контекст, атрибут объявления) в gameview который пройдет gridColRow сумму в gamegeneration (генерирует случайную сетку), которая затем будет отображаться с gameview.

Однако, если я изменяю ориентацию экрана, создается новая сетка, как я могу заставить ее сохранить одну и ту же сетку даже после изменения ориентации экрана?

я использую это в Gameview,

protected Parcelable onSaveInstanceState() {} 

И

protected void onRestoreInstanceState(Parcelable state) {} 

& расслоения положить/восстановления.

Однако он не работает, сетка по-прежнему отличается. ниже - простой пример (где я просто хочу сохранить номер, но все еще имею проблему).

благодаря

protected Parcelable onSaveInstanceState() { 
     Bundle bd = new Bundle(); 
     bd.putParcelable("instanceState", super.onSaveInstanceState()); 
     bd.putInt("save1", numbersave); 
     return super.onSaveInstanceState(); 

    } 

protected void onRestoreInstanceState(Parcelable state) { 
     Bundle bd = (Bundle) state; 
     super.onRestoreInstanceState(bd.getParcelable("instanceState")); 
     numbersave= bundle.getInt("save1"); 
    } 
+0

не понимает то, что вы здесь пытаются! вы пытаетесь передать объекты какого-либо класса, который вы создали, или вы пытаетесь сохранить состояние Activity и, следовательно, сохраняете состояние ваших объектов? –

+0

2-й, мне нужно сохранить состояния объекта, чтобы использовалась одна и та же сетка и не воссоздавалась. Например, в forcreate для моей игровой активности у меня есть mView = новый GameView (это, null); , каждый раз, когда создается действие, он вызывается и создается новая сетка – confusedOne

+0

, тогда класс [из которого вы хотите сохранить состояние объекта] должен 'parcelable' или' serializable', а затем использовать мой ответ, чтобы сохранить его состояние экземпляра –

ответ

0

Вы должны переопределить onSaveInstanceState(Bundle savedInstanceState) и записывать значение состояния приложения, которые вы хотите, чтобы изменить параметр Bundle, как это:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    // Save UI state changes to the savedInstanceState. 
    // This bundle will be passed to onCreate if the process is 
    // killed and restarted. 
    savedInstanceState.putBoolean("MyBoolean", true); 
    savedInstanceState.putDouble("myDouble", 1.9); 
    savedInstanceState.putInt("MyInt", 1); 
    savedInstanceState.putString("MyString", "Welcome back to Android"); 
    // etc. 
    // Also you can add parcelable and serializable for Objects of classes 
} 

сверток, по существу, способ хранящема NVP (карта «Name-Value Pair»), и он будет принят до onCreate(), т.е. вы можете восстановить свое состояние на onCraete

// Check whether we're recreating a previously destroyed instance 
    if (savedInstanceState != null) { 
     // Restore UI state from the savedInstanceState. 
     // This bundle has also been passed to onCreate. 
     boolean myBoolean = savedInstanceState.getBoolean("MyBoolean"); 
     double myDouble = savedInstanceState.getDouble("myDouble"); 
     int myInt = savedInstanceState.getInt("MyInt"); 
     String myString = savedInstanceState.getString("MyString"); 
     // etc. 
     // Also you can get parcelable and serializable for Objects of classes 
    } else { 
     // Probably initialize members with default values for a new instance 
    } 

ИЛИ вы можете переопределить onRestoreInstanceState() где вы бы извлечь значения, как это:

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    boolean myBoolean = savedInstanceState.getBoolean("MyBoolean"); 
    double myDouble = savedInstanceState.getDouble("myDouble"); 
    int myInt = savedInstanceState.getInt("MyInt"); 
    String myString = savedInstanceState.getString("MyString"); 
    // etc. 
    // Also you can get parcelable and serializable for Objects of classes 
} 

Вы обычно используют этот метод для хранения значений экземпляра для вашего приложения (выбора, неспасенному текста и т.д.).

Edit:

Для сохранения состояния объекта вашего класса Gameview то класс должен реализовать parcelable (рекомендуется) или serializable см это answer подробности

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