Android:在AlertDialog被解雇后,活动似乎失去了焦点

时间:2011-05-20 05:18:33

标签: android alertdialog

我有一个带有按钮的Activity,单击按钮显示AlertDialog,工作正常。 但是在我单击AlertDialog上的“确定”或“取消”按钮后,AlertDialog会根据需要消失,但奇怪的是:

在AlertDialog消失后,Activity似乎失去了焦点,这意味着它不再接受任何触摸。

以下是代码:

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将消失。但, 活动无法接受任何接触。

如果我单击模拟器的“BACK”按钮,则Activity可以再次接收触摸,从那时起,它将非常好用,例如再次单击“显示”按钮,然后再次单击“确定”,在AlertDialog消失后,“活动”可以接收触摸,而无需再单击模拟器的“返回”按钮。

那么,有谁能告诉我如何解决这个问题(活动首次无法接触到这一点)?

TIA

2 个答案:

答案 0 :(得分:1)

“取消”按钮是否正常工作?即按下后活动是否正常?

我注意到你的代码存在这种差异:

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

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

第一行使用AlertDialog.OnClickListener,第二行使用DialogInterface.OnClickListener。我刚检查了我的代码,我的所有对话框都使用了DialogInterface.OnClickListener。我不确定它是否有任何区别,但可能值得用“确定”按钮尝试DialogInterface.OnClickListener

答案 1 :(得分:1)

删除new AlertDialog.Builder(this).create().show();

来自您的代码。它会工作得很好。