按下后退键关闭活动和对话框

3

我有一个带有 setCancelable(false) 的进度对话框的活动。

我想在按下返回键时完成这个活动并解除 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();

1
为什么你不能在onBackPressed方法中设置pDialog.setCanceleable(true)。而且finishonBackPressed做的事情是一样的。删除this.finish(); - Rethinavel
1
如果您将setCancelable(true)更改为什么会发生?那么您的代码是否能正常工作? - Melquiades
发布你的ProgressDialog代码。 - Hamid Shatu
@user57445:请看我的回答。已经成功测试过了。 - Spring Breaker
6个回答

3

设置

pDialog.setCancelable(true);

你的代码其余部分都没问题。


2

只需在 OnStop() 中关闭对话框,按下返回键即可自动关闭 Activity

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

愉快编码!!


2
你可以通过以下2个步骤实现: 步骤1pDialog.setCancelable(false) 改为 pDialog.setCancelable(true),因为如果设置为false,Dialog是无法取消的。 步骤2 向你的Dialog添加监听器,以便在被取消时进行监听,如下所示:
pDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                // if from activity
                finish();

            }

        });

1
使用此方法,无需调用活动的finish方法:
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if(null != pDialog)
pDialog.dismiss();
        }
        return super.onKeyDown(keyCode, event);
    }

0

在对话框关闭时结束活动:

pDialog .setOnDismissListener(new OnDismissListener() {

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

0
这是一个进度对话框的小例子,关闭它和活动... 选项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...

在某个线程或任何你想要的地方完成它...

 dialog.dismiss();

在返回键按下时

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

选项2

创建全局变量

Boolean validation=false;

创建进度对话框。
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();

或者

 //if finish with backpress
 validation=false;
 dialog.dismiss();

在返回键按下时

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接