2012-07-26 27 views
1

我有一個耗時的任務發生在doInBackground()方法中,但是在該方法中,我希望能夠使用百分比數據更新progressDialog。我怎樣才能做到這一點?如何在線程的doInBackground部分期間更新UI?

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) 
    {   

    } 
} 

回答

0

的AsyncTask有方法onProgressUpdate(Integer...),您可以調用每個迭代例如或者每個進度是通過調用publishProgress()期間doInBackground()完成時間。

參考docs更多細節


注意,第二個參數是進展變量

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) 
    {   

    } 
} 
+0

但如何知道的AsyncTask走多遠是,什麼是量尺這麼說? – user1154644 2012-07-26 01:40:10

+0

測量單位?你可以隨心所欲地做任何事情,比如'alreadydownloaded/sizeoffile',簡單的'43/100%',無論你想要顯示和更新:) – silentw 2012-07-26 16:46:50

2

覆蓋的onProgressUpdate()方法是這樣的:

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

併發布進度

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

嘗試參照本link