2013-03-22 3 views
3

Я разрабатываю приложение, в котором я переопределяю кнопку «Назад». Я создал флажок. По щелчку которого я звоню намерение для:Android: onSaveInstanceState in Back button

startActivityforResult(); 

, а также поддержания состояния активности, как:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putBoolean("checkbox", checkbox.isChecked()); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    checkbox_state = savedInstanceState.getBoolean("checkbox"); 
} 

, которые идут хорошо, и состояние поддерживается. Значит, я ввожу значение в текст редактирования. и на флажке щелкните по вызову новой активности для результата и в то время как возврат к первой активности будет поддерживать состояние.

Теперь, но из второго действия, если я нажимаю кнопку возврата устройства, состояние не поддерживается.

Так что я должен делать, чтобы поддерживать состояние на задней панели. Я искал, но не нашел удовлетворенного решения. Пожалуйста, предложите мне.

ответ

2

Когда вы запускаете новое действие, текущее действие будет скрыто, а новая операция будет помещена поверх стека. Теперь, если вы нажмете кнопку «Назад» в новом мероприятии, тогда первое действие должно появиться в текущем состоянии (если оно не было уничтожено, вызывается finish()), где оно было оставлено, т.е. если флажок был отмечен, он должен оставаться проверено. Вам не нужно сохранять состояние активности, если ориентация не будет изменена или действие не будет уничтожено.

Уверены ли вы, что вы ничего не делаете в методе onActivityResult или onResume(), который влияет на состояние флажка? Я бы рекомендовал сначала прокомментировать весь код в обоих методах и посмотреть, сохраняет ли ваш флажок состояние. Также вы также можете убедиться, что сам код не снимает флажок перед началом нового действия?

+0

Я ввожу некоторые данные в текст редактирования в activity2 и захватывая эти данные в activity1 с помощью намерения. –

1

Теперь, но из второго действия, если я нажимаю кнопку возврата устройства, состояние не поддерживается.

onSaveInstanceState() В основном используется для изменения конфигурации (например, поворота экрана).

Так что я должен сделать, чтобы поддерживать состояние на задней кнопку

Скорее всего, нет «состояния», которое должно быть «поддерживается», за пределами вашей модели данных. В вашей деятельности необходимо обновить свою модель данных: файлы, базу данных, предпочтения, ContentProvider, некоторые синглтоны, которые являются вашим менеджером модели данных в памяти, независимо от того.

+0

Допустим, у меня есть ListView, который я заполняю из базы данных. Считаете ли вы, что я должен заполнять его из базы данных каждый раз, когда я перехожу к нему из другого вида деятельности? Или я должен сохранить содержимое адаптера в состоянии и повторно использовать его? Точно так же, как знать, что вы это делаете :) –

+0

@ ΕГИІИО: Заполнение из базы данных является самым безопасным, поскольку данные, возможно, изменились с момента последней активности. Сохранение его в состоянии является худшим выбором. Средней стороной было бы поддерживать какой-то тип управления моделью данных, который кэширует информацию и является точкой доступа к модели данных по * всем * действиям. – CommonsWare

+0

Это худшее, потому что оно тратит ресурсы? Если вы знаете, что данные не обновляются, когда вы перемещаетесь между этими двумя действиями, не будет ли более восприимчивым восстанавливать его из состояния? Потому что мне не нравится видеть «загрузка, пожалуйста, подождите ...» между моими навигациями или когда я поворачиваю экран :) –