#android #android-alertdialog
#Android #android-alertdialog
Вопрос:
У меня есть действие с кнопкой, нажмите кнопку, чтобы отобразить AlertDialog, это работает нормально. Но после того, как я нажимаю кнопку «ОК» или «Отмена» в AlertDialog, AlertDialog исчезает по желанию, но странно то, что:
После исчезновения AlertDialog активность, похоже, теряет фокус, это означает, что она больше не может получать никаких касаний к ней.
Вот код:
protected Dialog onCreateDialog(int id, Bundle args)
{
new AlertDialog.Builder(this).create().show();
Dialog dialog = null;
switch(id)
{
case...
break;
case ID_DIALOG2:
AlertDialog.Builder builder = new AlertDialog.Builder(ControlDialog.this);
builder.setTitle("Prompt");
builder.setMessage("Are you sure to quit?");
builder.setPositiveButton("OK", new AlertDialog.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
Log.e("AlertDialog", dialog.toString() " " which);
// do something else
dialog.dismiss(); // even without dismiss(), the AlertDialog can disappear too.
//ControlDialog.this.dismissDialog(ID_DIALOG2); // doesn't work either
// dialog.cancel(); // doesn't work either
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
Log.e("AlertDialog", dialog.toString() " " which);
// do something else
dialog.dismiss();
}
});
dialog = builder.create();
//dialog.show();
break;
}
return dialog;
}
protected void onPrepareDialog(int id, Dialog dialog)
{
switch(id)
{
case ...
break;
case ID_DIALOG2:
((AlertDialog)dialog).setTitle("Title");
((AlertDialog)dialog).setMessage("Simple Information");
break;
}
}
public void onClick(View v)
{
switch(v.getId())
{
case R.id.show_button:
this.showDialog(ID_DIALOG2, null);
break;
case ...
}
}
Извините, я не могу опубликовать изображение : (
После нажатия кнопки «Показать» в действии появляется AlertDialog. После нажатия кнопки «ОК» в AlertDialog, AlertDialog исчезает. НО действие не может получать никаких касаний.
Если я нажму кнопку «НАЗАД» эмулятора, то Действие снова сможет получать касания, и с этого момента оно будет работать довольно хорошо, например, снова нажмите кнопку «Показать», а затем снова нажмите «ОК», после исчезновения AlertDialog действие может получать касания без повторного нажатия на кнопку «НАЗАД» эмулятора.
Итак, кто-нибудь может сказать мне, как решить эту проблему (активность не может получать касания в первый раз)?
TIA
Ответ №1:
Правильно ли работает ваша кнопка «Отмена»? т.Е. Правильно ли выполняется действие после ее нажатия?
Я заметил эту разницу в вашем коде:
builder.setPositiveButton("OK", new AlertDialog.OnClickListener()
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
В первой строке используется AlertDialog.OnClickListener
, а во второй используется DialogInterface.OnClickListener
. Я только что проверил свой код, и все мои диалоги используют DialogInterface.OnClickListener
. Я не уверен, имеет ли это какое-либо значение, но, возможно, стоит попробовать DialogInterface.OnClickListener
с помощью вашей кнопки «ОК».
Комментарии:
1. Спасибо, Гэри. Это DialogInterface. Сначала OnClickListener, а затем изменен на AlertDialog. OnClickListener после нескольких неудачных попыток. Я получил тот же результат, используя DialogInterface. OnClickListener или AlertDialog. OnClickListener
2. ОК. И отмена работает нормально? Возможно, вы захотите удалить эту строку:
new AlertDialog.Builder(this).create().show();
. Я не уверен, почему это там, но это может вызывать проблемы.3. Я допустил ошибку. Я забыл удалить первую строку (просто для проверки) в методе onCreateDialog:new AlertDialog. Builder(this).create().show(); и затем все работает нормально…
Ответ №2:
удалить new AlertDialog.Builder(this).create().show();
из вашего кода. Это будет работать абсолютно нормально.