2013-12-04 4 views
0

У меня есть 3 пользовательских вида. Первый работает отлично. Он содержит EditText, когда я запускаю намерение и возвращаюсь к тому, что пользователь вводил.Сохранить состояние TextView и Spinner внутри CustomView

Второй содержит TextView и третий Spinner. Они не спасают, когда я начинаю свое намерение и возвращаюсь.

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

Это то, что я вызываю в своих пользовательских представлениях, когда мне нужно их сохранять.

@Override 
public Parcelable onSaveInstanceState() { 
    textValue = editText.getText().toString(); 
    Bundle bundle = new Bundle(); 
    bundle.putParcelable("instanceState", super.onSaveInstanceState()); 
    bundle.putString(TEXT_VALUE_KEY, this.textValue); 

    return bundle; 
} 

@Override 
public void onRestoreInstanceState(Parcelable state) { 
    if (state instanceof Bundle) { 
     Bundle bundle = (Bundle) state; 
     textValue = bundle.getString(TEXT_VALUE_KEY); 
     editText.setText(textValue); 
     super.onRestoreInstanceState(bundle.getParcelable("instanceState")); 
     return; 
    } 

    super.onRestoreInstanceState(state); 
} 

Я не уверен, что я должен делать, поскольку onRestoreInstanceState не вызывается. Я думаю, что EditText customView работает, потому что по умолчанию поведение android сохраняет их временно, но это не спасает прядильщиков или TextView.

ответ

0

Вы должны изменить метод onCreate() для того, чтобы проверить, если Activity уже называется onSavedInstanceState так:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    if(savedInstanceState == null) { 
     // The activity haven't called onSavedInstanceState(), which means you should initialize your objects and UI here 
    } 
    else { 
     // Whatever states you saved onSavedInstanceState() are stored in savedInstaceState, so use them to reconstruct your customViews 
    } 
} 
+0

Спасибо за ответ Кристофер, я думаю, что я понял это. У меня есть метод .configure в моих пользовательских представлениях, которые я вызывал из onResume в моем фрагменте. У него было заявление, которое очищало ценности, которые мне нужны. Тем не менее, основной проблемой, которую я испытывал, является то, что в тех случаях, когда у меня были бы проблемы, назовется только onResume. Нет onCreate или onRestoreInstanceState. Однако, поскольку я делал это неправильно, я не уверен, что должно быть решение для моего сценария. – user2484014

+0

Я понимаю. У меня есть догадка, что, возможно, если вы вызовете метод configure из onCreate, а не onResume, он сможет поддерживать свое состояние. Если нет, попробуйте настроить свои фрагменты на onCreateView, так как они изначально поддерживают свои состояния, они должны быть восстановлены сами по себе после того, как onResume называется –

+0

Привет Кристофер, я прошу прощения за то, что не ответил раньше. Мне пришлось уйти на один день от моего проекта. Я думаю, что вы абсолютно правы, когда возобновляется, вызывается каждый раз, когда вы возвращаетесь, и вообще «Конфигурация» не должна выполняться каждый раз, поскольку она уже должна быть настроена. Я пришел к тому же выводу, что вы только что дали мне «Попробуйте настроить свои фрагменты на их onCreateView». Забавно, как все работает лучше, если вы используете инструменты, как они были предназначены. Я отметил ваш ответ как принятый ответ, поскольку он затронул этот вопрос. Мой оригинальный вопрос не имеет значения. Большое спасибо за помощь. – user2484014

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