【问题标题】:Android ProgressDialog dismiss. Detect sourceAndroid ProgressDialog 关闭。检测源
【发布时间】:2013-10-09 12:09:21
【问题描述】:

我目前有一个AsyncTask,其中有一个ProgressDialog。我将OnDismissListener 设置为setOnDismissListener,然后取消AsyncTask。问题是,无论我按下后退按钮还是屏幕中的任何位置,ProgressDialog(以及随后的AsyncTask)都会被忽略。

我想知道ProgressDialog是如何被解除的,然后如果按下后退按钮,我将取消AsyncTask,如果ProgressDialog之外的区域被按下,我只会最小化ProgressDialog,但AsyncTask 会继续。

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

谢谢

编辑(基于下面的 cmets):

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

@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);
            }

        });
    }

【问题讨论】:

  • 有 2 个监听器,onDismiss 和 onCancel
  • 描述不够,最好贴一些相关代码。
  • 当上述任一操作完成时,两个监听器都会被调用。

标签: android android-asynctask progressdialog


【解决方案1】:

使用 SimpleGestureDetector

detector = new SimpleGestureFilter(this,this);

【讨论】:

  • 这不是解决方法吗?无论我按回还是在屏幕上,对话框都会被取消,我只想更改每次发生的事情......
【解决方案2】:

我添加了一个私有变量:

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;
        }

    });

【讨论】:

    猜你喜欢
    • 2015-05-12
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多