2

asyタスクを使用してコードに単純なプロセスバーを追加したいと思います。いくつかの例を試しましたが、そのプロセスバーが機能していることがわかりません。私はここに私のコードを投稿します。あなたが私を助けてくれることを願っています。プロセスバーを停止するためのフラグのように、コードの一部が実行されたときにプロセスバーを停止したいと思います。いくつかのコードを投稿してください。

どうもありがとう!

ここに私のコード:

private class loading extends AsyncTask<Void, Void, Integer> {

    Context context;
    ProgressBar progressBar;
    static final long waitTime = 1 * 4000L;
    long preTime;
    int progress;

    public loading(Context context) {

        this.context = context;
        progressBar = (ProgressBar) findViewById(R.id.progress_bar);
        progressBar.setProgress(0);

    }

    protected void onPostExecute(Integer result) {
        Intent intent = new Intent(this.context, first.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        context.startActivity(intent);
        finish();
  return;
    }

    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
    preTime = System.currentTimeMillis();

    }

    protected void onProgressUpdate(Integer... values) {
        progressBar.setProgress(values[0]);

    }

    @Override
    synchronized protected Integer doInBackground(Void... arg0) {
        int waited = 0;
        while (waited < 3000) {
            try {


                //   SystemClock.sleep(100); 
                this.wait(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            waited += 100;
        }
        return null;



    }
}
4

2 に答える 2

1

UIを更新するには、メソッドでpublishProgress ()doInBackgroundを呼び出す必要があります。

行の後にwaited += 100;追加:

int progress = Math.round((float)waited / 3000 * 100);
publishProgress(progress);

AsyncTaskまた、進行状況を反映するために整数を使用する場合は、の署名が間違っています。汎用パラメーターはAsyncTask<Params, Progress, Result>であるため、この場合、引数を受け入れたり、から意味のある値を返したりすることはありませdoInBackgroundんが、進行状況を示すためにを返します。したがって、クラス宣言を次のように変更します。Integer

private class loading extends AsyncTask<Void, Integer, Integer>
{
    //your implementation
}
于 2012-07-20T14:23:45.410 に答える
0

AsyncTask.publishProgressを呼び出していないため、onProgressUpdateメソッドが呼び出されることはありません。

ちなみに、クラス名loadingは命名規則に違反しているため、これは良い習慣ではありません。

于 2012-07-20T14:24:57.750 に答える