#java #android #android-dialog
#java #Android #android-диалог
Вопрос:
я хочу иметь в своем приложении alertdialog, сообщение которого обновляется каждый раз, когда оно отображается. Это связано с тем, что значение диалогового окна зависит от некоторых значений в приложении.
Теперь я попытался использовать метод ShowDialog:
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
showDialog(RESULT_DIALOG);
return false;
}
Но как только диалоговое окно создано, оно не изменяет сообщение (я знаю, что если диалоговое окно создано, оно использует запущенную версию).
Мой код метода onCreateDialog:
public Dialog onCreateDialog(int dialogId) {
AlertDialog dialog;
switch(dialogId) {
case RESULT_DIALOG:
// do the work to define the pause Dialog
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(localTv.getText())
.setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
dialog = builder.create();
break;
default:
dialog = null;
}
return dialog;
}
Существует способ обновить содержимое AlertDialog.
На самом деле я создаю новое диалоговое окно каждый раз, когда вызывается событие onTouch. Но я не уверен, что это самый чистый способ решить эту проблему.
Есть идеи? Спасибо 🙂
Ответ №1:
Вы должны использовать метод onpreparredialog:
@Override
protected void onPrepareDialog ( int id, Dialog dialog ) {
switch ( id ) {
case RESULT_DIALOG:
AlertDialog alertDialog = ( AlertDialog ) dialog;
alertDialog.setMessage( localTv.getText() );
break;
}
super.onPrepareDialog( id, dialog );
}
Из http://developer.android.com/guide/topics/ui/dialogs.html :
Перед отображением диалогового окна Android также вызывает дополнительный метод обратного вызова onpreparredialog(int, Dialog). Определите этот метод, если вы хотите изменять какие-либо свойства диалогового окна при каждом его открытии. Этот метод вызывается каждый раз при открытии диалогового окна, тогда как onCreateDialog(int) вызывается только при первом открытии диалогового окна. Если вы не определите onpreparredialog() , то диалоговое окно останется таким же, каким оно было при предыдущем открытии. Этому методу также передается идентификатор диалогового окна вместе с объектом диалога, который вы создали в onCreateDialog() .
Ответ №2:
Вы всегда можете изменить диалоговое окно с помощью onpreparredialog или удалить диалоговое окно (чтобы оно всегда проходило через onCreateDialog), установив onDismiss (dialog.setOnDismiss) для удаления идентификатора диалога (removeDialog(id)).