ProgressDialog的OnCancelListener上的完成活动不起作用

时间:2012-02-21 17:19:12

标签: android android-progressbar

在我的活动中,我从Web服务加载一些数据,在此期间向用户显示ProgressDialog ...我希望用户能够在按下BACK D-Pad键时关闭活动。 我这样做了:

public class MyActivity implements OnCancelListener {
    /*  ...  */

    public void startDialog() {
        ProgressDialog pd = ProgressDialog.show(
            MyActivity.this,    // Context
            "",                 // title for dialog
            "Loading...",       // message for dialog
            true,               // indeterminate?
            true,               // cancellable?
            this                // onCancelListener()
        );
    }

    @Override
    public void onCancel(DialogInterface dialog) {
        // I want to finish() this activity when dialog is canceled
        finish();
    }
}

您可以看到我正在使用Dialog的 OnCancelListener 界面的 onCancel()方法完成当前活动。但是在对话框可见时按下BACK时不调用此方法。对话框消失,但不会调用onCancel。

Y'

1 个答案:

答案 0 :(得分:2)

也许这是android的限制。尝试使用处理程序

public class MyActivity implements OnCancelListener {
    /*  ...  */

    private Handler mHandler = new Handler(){

        @Owerride
        public void handleMessage(Message message) {
        switch (message.what) {
        case 1:{
            finish();
        } break;
            }
        }
    };

    public void startDialog() {
        ProgressDialog pd = ProgressDialog.show(
            MyActivity.this,    // Context
            "",                 // title for dialog
            "Loading...",       // message for dialog
            true,               // indeterminate?
            true,               // cancellable?
            this                // onCancelListener()
        );
    }

    @Override
    public void onCancel(DialogInterface dialog) {
        mHandler.sendEmptyMessage(1);
    }
}