1

私はこのようなAsyncTaskを持っています:

private class RetrieveDataAsyncTask extends AsyncTask<Void, Void, Boolean> {

    ProgressDialog progressDialog;

    @Override
    protected void onPreExecute() {
            progressDialog = ProgressDialog.show(getSherlockActivity(), "In progress", "Loading"); 
    }

    @Override
    protected Boolean doInBackground(Void... params) {
        try {
            currentScreen.retrieveData();
            return true;
        } catch (IOException ex) {
            return false;
        }
    }

    @Override
    protected void onPostExecute(Boolean result) {
            progressDialog.dismiss();
            if (result) {
                currentScreen.retrieveDataFinished();
            } else {
                showExceptionOccurred();
            }
    }

AsyncTaskにかかる時間が500ミリ秒未満の場合、ProgressDialogを表示したくありません。ちらつきが発生するだけで、イライラする可能性があります。私が欲しいのは、500ミリ秒待って、AsyncTaskがまだビジーであるかどうかを確認し、ビジーである場合は、ProgressDialogを表示することです。

どうすればそれを達成できますか?

4

2 に答える 2

2

このようにしてみてください:

final Handler handler = new Handler();


private class RetrieveDataAsyncTask extends AsyncTask<Void, Void, Boolean> {

    ProgressDialog progressDialog = null;

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected Boolean doInBackground(Void... params) {
        handler.postDelayed(pdRunnable, 500);

        try {
            currentScreen.retrieveData();
            return true;
        } catch (IOException ex) {
            return false;
        }
    }

    @Override
    protected void onPostExecute(Boolean result) {
            handler.removeCallbacks(pdRunnable);
            if(progressDialog != null)
                 progressDialog.dismiss();

            if (result) {
                currentScreen.retrieveDataFinished();
            } else {
                showExceptionOccurred();
            }
    }

    final Runnable pdRunnable = new Runnable() {
            @Override
            public void run() {
                progressDialog = ProgressDialog.show(getSherlockActivity(),
                "In progress", "Loading");
            }
    };

}
于 2012-06-08T10:22:49.317 に答える
0

@Stanの提案は正しいようです:

次の行を試してくださいonPreExecute()

@Override
protected void onPreExecute() {
    Timer t =new Timer();
    t.schedule(new TimerTask() {

        @Override
        public void run() {
        progressDialog = ProgressDialog.show(getSherlockActivity(), "In progress", "Loading"); 
        }
    }, 500);

}
于 2012-06-08T10:31:58.540 に答える