【问题标题】:Android AsynTask with progress dialog cancel带有进度对话框取消的 Android AsyncTask
【发布时间】:2011-07-27 16:44:28
【问题描述】:

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

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

我找不到那种中断 AsynTask 的例子。我阅读了关于取消(布尔),但我不知道如何从 UI 调用。

谁能给我意见。

谢谢

【问题讨论】:

    标签: android android-asynctask progressdialog


    【解决方案1】:
        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 方法执行整理代码。

    【讨论】:

      【解决方案2】:
      public MyActivity extends Activity {
      
      
        private MyAsyncTask task;
      
        public onCreate() {
           task = new MyAsyncTask(); // MyAsyncTask has a progress dialog and dismiss it
           // in an overrided cancel() method 
           task.execute();
        }
      
        private void handleOnBackButton() {
           task.cancel(true);
        }
      

      那么您只需在用户按下返回键或主页时调用handleOnBackButton()。您可以使用onKeyDown() 方法来完成。

      【讨论】:

      • 在这种情况下,我认为这比我的解决方案更好。删除我的答案。
      • 这不会处理对话框中的取消,当用户在显示时单击屏幕上的其他位置时可能会发生这种情况。似乎 sharic19 的答案更合乎逻辑,因为它在对话框本身上设置了 OnCancelListener
      • 你不需要 handleOnBackButton();足以设置 progressDialog.setCancelable(true);使其对“后退”按钮做出反应。
      【解决方案3】:

      您只需将 ProgressDialog 设置为可取消。当您单击“返回”按钮时,它会消失。 像这样:

      dialog.setCancelable(true);
      

      您必须覆盖 onBackPressed 以关闭 ProgressDialog 并取消 AsyncTask

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

      【讨论】:

        【解决方案4】:

        我发现后退按钮事件被“显示”的 ProgressDialog 消耗,因此 Activity 不会对取消采取行动。我必须在对话框中添加一个监听器:

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

        没关系。

        我发现使用 Activity 的对话框管理并在 onCreateDialog 期间添加一个 onDismissListener 更加简洁。解雇侦听器可以取消任务。无需保留对对话框的引用,这是我们需要监听用户取消的唯一地方。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多