6

私はこのように実装された ProgressDialog を持っています:

// show progress dialog while date is loading
        progressDialog = ProgressDialog.show(XYActivity.this, getResources().getString(R.string.progress_dialog_please_wait), getResources().getString(R.string.progress_dialog_loading), true);
        progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                cancel(true);
                Log.w(LOGTAG, "loading cancelled via back button");
            }

        });
        progressDialog.setCancelable(true);

この ProgressDialog は AsyncTask (PreExecute) 内に実装されているため、cancel(true) メソッドは AsyncTask を停止します。これはすべてうまくいきます。

問題は、画面をランダムにタッチして ProgressDialogをキャンセルできることです。戻るボタンを押すだけでダイアログを閉じたい。私を助けてください!君たちありがとう。

4

2 に答える 2

7

これは私のために働いた:

@Override
protected void onPreExecute() {
    progressDialog = ProgressDialog.show(context, "Title", "Loading...", true, true, new OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            cancel(true);
        }
    });
    progressDialog.setCanceledOnTouchOutside(false);
}

GedankenNebelによって提案されたsetCanceledOnTouchOutsideものはかなりきれいです。

于 2013-02-13T06:39:22.620 に答える
1

以下の命令を試してください

キャンセル ボタン全体についてはよくわかりません... onCancel() メソッドが正しく起動しないという報告を聞いたことがあります。私の解決策は、ボタンが押されるたびに戻る呼び出しを使用して、ダイアログに通常のボタンを作成することだけです。

private void createCancelProgressDialog(String title, String message, String buttonText)
{
    cancelDialog = new ProgressDialog(this);
    cancelDialog.setTitle(title);
    cancelDialog.setMessage(message);
    cancelDialog.setButton(buttonText, new DialogInterface.OnClickListener() 
    {
        public void onClick(DialogInterface dialog, int which) 
        {
            // Use either finish() or return() to either close the activity or just the dialog
            cancelDialog.dismiss();
        }
    });
    cancelDialog.show();
}

次に、アクティビティの他の場所から単純な呼び出しメソッドを使用するだけです

createCancelProgressDialog("Loading", "Please wait while activity is loading", "Cancel");

かなり単純な解決策ですが、それはトリックを行います;) また、cancelDialog はアクティビティ ワイプ変数であることに注意してください。他の場所から呼び出す必要がない場合は、変数のスコープをその方法。

于 2012-04-23T11:34:54.600 に答える