1

doInBackground()メソッドで実行されている時間のかかるタスクがありますが、そのメソッド内から、progressDialogをパーセンテージデータで更新できるようにしたいと考えています。これどうやってするの?

    class GetDataTask extends AsyncTask<Void, Void, Void> {     

    @Override
    protected void onPreExecute()
    {
        mProgressDialog = ProgressDialog.show(getActivity(),Constants.APP_NAME,"Getting data", true);
    }

    @Override
    protected Void doInBackground(Void... params)
    {
        //go get data, update mProgressDialog
        return null;
    }

    @Override
    protected void onPostExecute(Void res)
    {           

    }
}
4

2 に答える 2

2

次のようにonProgressUpdate()メソッドをオーバーライドします。

@Override
protected void onProgressUpdate(Integer... progress) {
    super.onProgressUpdate(progress);
    mProgressDialog.setProgress(progress[0]);
}

進捗状況を公開します

publishProgress((int) (total * 100 / fileLength));

このリンクを参照してみてください

于 2012-07-26T01:29:42.647 に答える
0

AsyncTaskにはonProgressUpdate(Integer...)、たとえば、各反復を呼び出すことができるメソッド、またはをdoInBackground()呼び出すことによって進行が行われるたびに呼び出すことができるメソッドがありますpublishProgress()

詳細については、ドキュメントを参照してください


2番目のパラメーターは進行変数であることに注意してください

class GetDataTask extends AsyncTask<Void, String, Void> {     

    @Override
    protected void onPreExecute()
    {
        mProgressDialog = ProgressDialog.show(getActivity(),Constants.APP_NAME,"Getting data", true);
    }

    @Override
    protected Void doInBackground(Void... params)
    {
        publishProgress(""+(int)count);
        return null;
    }

    protected void onProgressUpdate(String... progress) {
        /**
         * Sets current progress on ProgressDialog
         */
        mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }

    @Override
    protected void onPostExecute(Void res)
    {           

    }
}
于 2012-07-26T01:28:21.777 に答える