Android: после закрытия AlertDialog активность, кажется, теряет фокус

1

У меня есть действие с помощью кнопки, нажмите кнопку, чтобы показать 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 ...
    }
}

Извините, я не могу опубликовать изображение: (

После нажатия кнопки "Показать" в Activity появляется AlertDialog. После нажатия кнопки "ОК" на AlertDialog, AlertDialog исчезает. НО, Активность не может быть затронута.

Если я нажму кнопку "НАЗАД" эмулятора, то активность может снова получить штрихи, и с этого момента она будет работать неплохо, например. Нажмите кнопку "Показать" еще раз, а затем снова нажмите "ОК" , после того, как AlertDialog исчезнет, ​​активность активна, чтобы получать штрихи без другого нажатия кнопки "BACK" эмулятора.

Итак, может ли кто-нибудь сказать мне, как решить эту проблему (активность не может получить штрихи в первый раз)?

ТИА

Теги:
alertdialog

2 ответа

1
Лучший ответ

Правильно ли работает кнопка "Отмена"? то есть, действует ли действие правильно после его нажатия?

Я заметил эту разницу в вашем коде:

builder.setPositiveButton("OK", new AlertDialog.OnClickListener()

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()

Первая строка использует AlertDialog.OnClickListener, а вторая использует DialogInterface.OnClickListener. Я только что проверил свой код, и все мои диалоги используют DialogInterface.OnClickListener. Я не уверен, что это имеет какое-то значение, но, возможно, стоит попробовать DialogInterface.OnClickListener с помощью кнопки "ОК".

  • 0
    Спасибо Гэри. Сначала это DialogInterface.OnClickListener, а затем, после нескольких неудачных попыток, изменился на AlertDialog.OnClickListener. Я получил тот же результат, используя DialogInterface.OnClickListener или AlertDialog.OnClickListener.
  • 0
    ХОРОШО. А отмена работает нормально? Возможно, вы захотите удалить эту строку: new AlertDialog.Builder(this).create().show(); , Я не уверен, почему это там, но это может вызвать проблемы.
Показать ещё 3 комментария
1

удалить new AlertDialog.Builder(this).create().show();

из вашего кода. Он будет работать абсолютно нормально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню