Валится кастомный диалог при изменении ориентации
Добавлено: 04 фев 2012, 00:24
Здравствуйте, уважаемые форумчане!
Не могу найти решение сложившейся ситуации. Дошел до чтения исходников андроида, но все равно не могу понять, не хватает образования
Сложилась такая ситуация. Для того, чтобы в приложении, в каждом активити не описывать диалог был создан свой. Все прекрасно работает до тех пор пока не изменяется ориентация телефона или эмулятора, потом прорисовывается базовое активити, но уже без диалога, причем в такой же ситуации стандартный диалог работает корректно. Был найден выход в манифесте прописать android:configChanges = "orientation" и он работает. Но только на телефоне! В эмуляторе выдает ошибку в строке dialog.show(); в базовом активити. И на экране только активити без диалога. Есть подозрения, что возможно на других телефонах возможно повторение этого неприятного события.
Таким образом. Сбой возникает при повторном вызове onCreate() активити, непонятно что происходит с контекстом при повторном вызове. Все что я проделывал похоже на танцы с бубном. Кроме уничтожения диалога в onPause(). Тогда ошибки не возникает, но диалог пропадает при повороте
Решил искать чем же отличается создание и жизненный цикл стандартного диалога, от созданного мной. Но ...
Вот код класса диалога. В базовом активити вызывал из разных мест (с различным контекстом). Но... Пришел сюда
public class SimpleDialog extends Dialog {
public static boolean DIALOG_EXIST = false;
public SimpleDialog(final Context context) {
super(context);
}
TextView dialogMessage;
private String message=null;
private int messageId=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.alertdialog);
Button buttonOK = (Button) findViewById(R.id.btn_dialog_ok);
buttonOK.setOnClickListener(new OKListener());
dialogMessage = (TextView) findViewById(R.id.dialogtext);
if (message != null | messageId !=0){
// dialogMessage.setText(message);
dialogMessage.setText(messageId);
}
else {
dialogMessage.setText("Anknown error");
}
}
public void setMessage(String text) {
this.message = text;
}
public void setMessage(int idd) {
this.messageId = idd;
}
private class OKListener implements android.view.View.OnClickListener {
@Override
public void onClick(View v) {
SimpleDialog.this.dismiss();
}
}
}
Заранее спасибо. Критика и размышления о жизненных циклах приветствуются!
Не могу найти решение сложившейся ситуации. Дошел до чтения исходников андроида, но все равно не могу понять, не хватает образования
Сложилась такая ситуация. Для того, чтобы в приложении, в каждом активити не описывать диалог был создан свой. Все прекрасно работает до тех пор пока не изменяется ориентация телефона или эмулятора, потом прорисовывается базовое активити, но уже без диалога, причем в такой же ситуации стандартный диалог работает корректно. Был найден выход в манифесте прописать android:configChanges = "orientation" и он работает. Но только на телефоне! В эмуляторе выдает ошибку в строке dialog.show(); в базовом активити. И на экране только активити без диалога. Есть подозрения, что возможно на других телефонах возможно повторение этого неприятного события.
Таким образом. Сбой возникает при повторном вызове onCreate() активити, непонятно что происходит с контекстом при повторном вызове. Все что я проделывал похоже на танцы с бубном. Кроме уничтожения диалога в onPause(). Тогда ошибки не возникает, но диалог пропадает при повороте
Решил искать чем же отличается создание и жизненный цикл стандартного диалога, от созданного мной. Но ...
Вот код класса диалога. В базовом активити вызывал из разных мест (с различным контекстом). Но... Пришел сюда
public class SimpleDialog extends Dialog {
public static boolean DIALOG_EXIST = false;
public SimpleDialog(final Context context) {
super(context);
}
TextView dialogMessage;
private String message=null;
private int messageId=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.alertdialog);
Button buttonOK = (Button) findViewById(R.id.btn_dialog_ok);
buttonOK.setOnClickListener(new OKListener());
dialogMessage = (TextView) findViewById(R.id.dialogtext);
if (message != null | messageId !=0){
// dialogMessage.setText(message);
dialogMessage.setText(messageId);
}
else {
dialogMessage.setText("Anknown error");
}
}
public void setMessage(String text) {
this.message = text;
}
public void setMessage(int idd) {
this.messageId = idd;
}
private class OKListener implements android.view.View.OnClickListener {
@Override
public void onClick(View v) {
SimpleDialog.this.dismiss();
}
}
}
Заранее спасибо. Критика и размышления о жизненных циклах приветствуются!