Как сохранить / восстановить (обновить) ссылку в диалоговом окне во время поворота экрана?(Мне нужна ссылка в методе действия onCreate.)
protected Dialog onCreateDialog(int id) {
...
AlertDialog.Builder adb = new AlertDialog.Builder(this);
...
mydialog = adb.create();
...
}
Но onCreateDialog запускается после onCreate.
1 ответ
Если вы хотите быть обратно совместимым, вы делаете это следующим образом.
class MyActivity extends Activity {
protected static final class MyNonConfig {
// fill with public variables keeping references and other state info, set to null
}
private boolean isConfigChange;
private MyNonConfig nonConf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
nonConf = (MyNonConfig)getLastNonConfigurationInstance();
if (nonConf == null) { nonConf = new NonConfig(); }
// handle the information of the nonConf objects/variables
...
}
@Override
protected void onStop() {
super.onStop();
isConfigChange = false;
}
@Override
public Object onRetainNonConfigurationInstance() {
isConfigChange = true;
return nonConf;
}
@Override
protected void onDestroy() {
super.onDestroy();
// handle objects in nonConf, potentially based on isConfigChange flag
...
}
Объекты nonConf переживут все изменения конфигурации (но не реальные остановки вашего приложения). Кроме того, флаг isConfigChange достоверно сообщает вам, будет ли ваша деятельность воссоздана немедленно или нет. Таким образом, вы можете отменить / отсоединить задачи или адекватно обработать другие ресурсы на основе этой информации.
Изменить: Обратите внимание, что если onDestroy()
называется тогда вы можете положиться на isConfigChange
флаг. Кроме того, если Android обрабатывает изменение конфигурации, то onDestroy()
будет называться. Однако, если Android собирается завершить вашу деятельность, то вызов onDestroy() не является обязательным, поскольку Android считает, что ваша активность может быть убита сразу после вызова. onPause()
(предварительно соты) или onStop()
(Соты и не только). Это не проблема, потому что, если ваша деятельность будет убита, состояние ваших многочисленных объектов больше никому не будет интересно. Однако, если вы хотите быть дружелюбным, это еще один аспект, который следует учитывать при принятии решения о onPause()
а также onStop()
,
Надеюсь это поможет.