0

我目前有一个里面AsyncTask有一个ProgressDialog。我设置了OnDismissListenerby setOnDismissListener,然后我取消了AsyncTask。问题是,无论我按下后退按钮还是屏幕中的任何位置,ProgressDialog(以及随后的)都会被解雇。AsyncTask

我想达到一个我知道如何ProgressDialog被解雇的地步,然后如果按下后退按钮,我将取消AsyncTask,如果ProgressDialog按下之外的区域,我将最小化ProgressDialogAsyncTask会继续。

我如何检测哪一组OnDismissListener?还有另一种方法可以完成我想做的事情吗?

谢谢

编辑(基于下面的评论):

这是我的代码。我在两个侦听器中都放置了一个断点,现在无论我如何取消对话框(后退按钮或对话框外),都会调用两个侦听器。

@Override
    protected void onPreExecute() {
        mProgressDialog = new ProgressDialog(mContext);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        mProgressDialog.setCancelable(true);
        mProgressDialog.show();

        mProgressDialog.setOnDismissListener(new OnDismissListener() {

            @Override
            public void onDismiss(DialogInterface dialog) {
                (SyncOperation.this).cancel(true);
            }

        });

        mProgressDialog.setOnCancelListener(new ProgressDialog.OnCancelListener() {

            @Override
            public void onCancel(DialogInterface dialog) {
                (SyncOperation.this).cancel(true);
            }

        });
    }
4

2 回答 2

0

使用 SimpleGestureDetector

detector = new SimpleGestureFilter(this,this);
于 2013-10-09T12:15:18.663 回答
0

我添加了一个私有变量:

private boolean mBackPressed;

然后我对听众实施如下:

mProgressDialog.setOnDismissListener(new OnDismissListener() {

        @Override
        public void onDismiss(DialogInterface dialog) {
            (SyncOperation.this).cancel(true);
            if(mBackPressed) {
                Toast.makeText(mContext, "Cancel", Toast.LENGTH_SHORT).show();
                mBackPressed = false;
            } else {
                Toast.makeText(mContext, "Minimize", Toast.LENGTH_SHORT).show();
            }
        }

    });

    mProgressDialog.setOnKeyListener(new ProgressDialog.OnKeyListener() {

        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            if(keyCode == KeyEvent.KEYCODE_BACK) {
                mBackPressed = true;
            }
            return false;
        }

    });
于 2013-10-09T13:05:36.883 回答