Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带进度对话框的Android AsynTask取消_Android_Android Asynctask_Progressdialog - Fatal编程技术网

带进度对话框的Android AsynTask取消

带进度对话框的Android AsynTask取消,android,android-asynctask,progressdialog,Android,Android Asynctask,Progressdialog,在我的android应用程序中,我使用带有进度对话框的AsynTask(请等待登录…)让用户使用我的网页登录(AsynTask中的web服务功能) 当用户单击设备上的“后退”按钮时,我想关闭“进度”对话框并取消AsynTask 我找不到那种打断AsynTask的例子。我读过cancel(布尔值),但我不知道如何从UI调用 谁能给我一个主意吗 谢谢您只需将ProgressDialog设置为可取消即可。当你点击“后退”按钮时,它就会消失。 像这样: dialog.setCancelable(true

在我的android应用程序中,我使用带有进度对话框的AsynTask(请等待登录…)让用户使用我的网页登录(AsynTask中的web服务功能)

当用户单击设备上的“后退”按钮时,我想关闭“进度”对话框并取消AsynTask

我找不到那种打断AsynTask的例子。我读过cancel(布尔值),但我不知道如何从UI调用

谁能给我一个主意吗


谢谢

您只需将ProgressDialog设置为可取消即可。当你点击“后退”按钮时,它就会消失。 像这样:

dialog.setCancelable(true);
您必须重写onBackPressed以关闭ProgressDialog以及取消AsyncTask

@Override
public void onBackPressed() {
YourAsyncTaskObject.cancel(true);
YourProgressDialog.dismiss();
return;
}

然后,当用户按back或home键时,只需调用
handleOnBackButton()
。您可以使用
onKeyDown()
方法执行此操作。

我发现后退按钮事件在ProgressDialog(显示)中被消耗,因此该活动无法对取消进行操作。我必须在对话框中添加一个侦听器:

mProgress = ProgressDialog
        .show(this, getText(R.string.progress_title),
        getText(R.string.progressing), true, true,
        new OnCancelListener() {
            public void onCancel(DialogInterface pd) {
                handleOnBackButton();
            }
        });         
别客气

我发现在onCreateDialog期间使用活动的对话框管理并添加onDismissListener要干净得多。拒绝侦听器可以取消该任务。不需要保存对对话框的引用,这是我们唯一需要监听用户取消的地方

    ProgressDialog progressDialog = ProgressDialog.show(ActivityName.this,
            "Title",
            "Message");
    progressDialog.setCancelable(true);
    progressDialog.setOnCancelListener(new OnCancelListener() {

        @Override
        public void onCancel(DialogInterface dialog) {
            // TODO Auto-generated method stub
            // Do something...
        }
    });
setCancelable(true)方法设置对话框是否可以用BACK键取消。
您可以通过setOnCancelListener->onCancel方法执行完成代码。

在这种情况下,我认为这是比我更好的解决方案。删除我的答案。这不会处理对话框上的取消,当用户在屏幕上单击其他地方时,可能会发生此情况。sharic19的答案似乎更符合逻辑,因为它本身就在对话框上设置了OnCancelListener。您不需要handleOnBackButton();足以设置progressDialog.setCancelable(true);为了让它在后退按钮上做出反应。
    ProgressDialog progressDialog = ProgressDialog.show(ActivityName.this,
            "Title",
            "Message");
    progressDialog.setCancelable(true);
    progressDialog.setOnCancelListener(new OnCancelListener() {

        @Override
        public void onCancel(DialogInterface dialog) {
            // TODO Auto-generated method stub
            // Do something...
        }
    });