Android 在反按时关闭活动和对话框

Android 在反按时关闭活动和对话框,android,progressdialog,Android,Progressdialog,我有一个活动,它有一个带有可设置取消(false)的进度对话框 我想完成该活动,并关闭backPressed()上的progressdialog box 我已经实现了如下所示的onBackPressed(),但它不起作用 @Override public void onBackPressed() { if(pDialog.isShowing()){ pDialog.dismiss(); } this.finish(); super.onBackPr

我有一个活动,它有一个带有
可设置取消(false)
的进度对话框

我想完成该活动,并关闭
backPressed()
上的
progressdialog box

我已经实现了如下所示的
onBackPressed()
,但它不起作用

@Override
public void onBackPressed() {
    if(pDialog.isShowing()){
        pDialog.dismiss();
    }
    this.finish();
    super.onBackPressed();
}
进度对话框代码为

        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setTitle("Connecting to Server");
        pDialog.setMessage("Updating Assignee Detail. Please wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();

只需关闭
OnStop()中的对话框
rest
Activity
finish()

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    if(progressDialog.isShowing()) {
        progressDialog.dismiss();
    }
}
快乐编码

pDialog.setCancelable(true);

剩下的代码也可以。

使用此方法,无需调用活动的finish:

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if(null != pDialog)
pDialog.dismiss();
        }
        return super.onKeyDown(keyCode, event);
    }

您可以通过以下两个步骤实现:

步骤1 改变

pDialog.setCancelable(false)
to

pDialog.setCancelable(true)

因为如果将
对话框设置为false,则无法取消该对话框

步骤2

将一个侦听器添加到您的
对话框
,以便在取消时,它将进行侦听,如下所示:

pDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                // if from activity
                finish();

            }

        });

对话框上的intead完成活动:

pDialog .setOnDismissListener(new OnDismissListener() {

            @Override
            public void onDismiss(DialogInterface dialog) {
                finish();
            }
        });

这是进度对话框的一个小示例,请关闭它并执行活动

选项1

创建进度对话框

ProgressDialog dialog = new ProgressDialog(this); //create progress dialog
    dialog.setMessage("¡wait it, please...!"); //body text...
    dialog.setCancelable(true); //if it will be cancelable
    //this is the listener cancelable
    dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialogInterface) {
            finish();
        }
    });
    dialog.show(); //show it...
ProgressDialog dialog = new ProgressDialog(this); //create progress dialog
    dialog.setMessage("¡wait it, please...!"); //body text...
    dialog.setCancelable(false); //if it will be cancelable
    //this is the listener dismiss
    dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialogInterface) {
                if(validation){
                    dialogInterface.dismiss();
                }else{
                    finish();
                }
            }
        });
    dialog.show(); //show it...
以某种威胁或任何你想要的方式完成它

 dialog.dismiss();
背压

@Override
public void onBackPressed() {
    if(dialog.isShowing()){
        dialog.cancel();
    }
    finish();
}
@Override
public void onBackPressed() {
    if(dialog.isShowing()){
        validation=false;
        dialog.dismiss();
    }
    finish();
}
选项2

创建一个全局变量

Boolean validation=false;
创建进度对话框

ProgressDialog dialog = new ProgressDialog(this); //create progress dialog
    dialog.setMessage("¡wait it, please...!"); //body text...
    dialog.setCancelable(true); //if it will be cancelable
    //this is the listener cancelable
    dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialogInterface) {
            finish();
        }
    });
    dialog.show(); //show it...
ProgressDialog dialog = new ProgressDialog(this); //create progress dialog
    dialog.setMessage("¡wait it, please...!"); //body text...
    dialog.setCancelable(false); //if it will be cancelable
    //this is the listener dismiss
    dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialogInterface) {
                if(validation){
                    dialogInterface.dismiss();
                }else{
                    finish();
                }
            }
        });
    dialog.show(); //show it...
完成它

 //if finish process 
 validation=true;
 dialog.dismiss();

背压

@Override
public void onBackPressed() {
    if(dialog.isShowing()){
        dialog.cancel();
    }
    finish();
}
@Override
public void onBackPressed() {
    if(dialog.isShowing()){
        validation=false;
        dialog.dismiss();
    }
    finish();
}

为什么不能在onBackPressed方法中设置pDialog.setCancelable(true)。而
finish
onBackPressed
做同样的事情。删除此.finish();如果更改为setCancelable(true),会发生什么情况?那么你的代码行得通吗?发布你的progressdialog代码。@user57445:请看我的答案。测试成功了。