我设置了setCancelable(false),但是Dialog不能用作模态窗口

时间:2013-12-02 07:21:23

标签: android

我设置了setCancelable(false)。在我看来,代码将首先显示一个对话框窗口,单击确定按钮后对话框窗口将关闭。

但事实上,代码直接关闭整个应用程序而不显示Dialog窗口。

如何在关闭整个应用程序之前显示Dialog?

   findViewById(R.id.btnClose).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {   
        AlertDialog.Builder builder = new Builder(SMSMain.this);
        builder.setMessage(getString(R.string.DeleteInContextPrompt));
        builder.setTitle(getString(R.string.Warning));
        builder.setCancelable(false);
        builder.setPositiveButton(getString(R.string.OK), new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                //I won't add finish() here
            }
        });

        builder.create().show();

        finish();
    }
});     

4 个答案:

答案 0 :(得分:4)

试试这个,

findViewById(R.id.btnClose).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {   
        AlertDialog dialog;
        AlertDialog.Builder builder = new Builder(SMSMain.this);
        builder.setMessage(getString(R.string.DeleteInContextPrompt));
        builder.setTitle(getString(R.string.Warning));
        builder.setCancelable(false);
        builder.setPositiveButton(getString(R.string.OK), new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                  dialog.dismiss(); 
                  finish();// call finish() to close this activity for OK click  
            }
        });

        dialog=builder.create();
        dialog.show();

       // finish();
    }
});     

答案 1 :(得分:1)

如何在关闭整个应用程序之前显示Dialog。 尝试

public void onStop(){
super.onStop();

 findViewById(R.id.btnClose).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {   
        AlertDialog.Builder builder = new Builder(SMSMain.this);
        builder.setMessage(getString(R.string.DeleteInContextPrompt));
        builder.setTitle(getString(R.string.Warning));
        builder.setCancelable(false);
        builder.setPositiveButton(getString(R.string.OK), new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                //I won't add finish() here
            }
        });

        builder.create().show();


    }
});  

}

答案 2 :(得分:0)

是的,因为finish();您的活动遭到破坏。 使用dialog.dismis();来关闭对话框

答案 3 :(得分:0)

// finish();你在OnClick中的代码中编写的这个问题就是问题,它使你的整个应用程序在对话之前关闭,如果你想在用户点击对话后关闭你的应用程序,在你的对话框中调用finish()内部点击事件按钮。

另外,请确保覆盖onBackPressed,以防您在用户预先选择后退按钮时弹出对话框以关闭您的动作。