簡體   English   中英

在不更改doInBackgroud()的情況下更改AsyncTask中progressDialog的消息

[英]Change the message of a progressDialog in AsyncTask without altering doInBackgroud()

我有這個doInBackground

@Override
protected Boolean doInBackground(Void... params){
    return syncIn.syncData();       
}

這是用於下載的asynctask 由於意大利面條式代碼,無法更改doInBackground的內容。 當任務執行任務時,我會打開進度對話框。 有沒有一種方法可以使用onProgressUpdate()和其他方法來動態更改對話框消息,而無需觸碰doInBackground

到目前為止,我在async類中創建了一個靜態字符串,該字符串可以通過syncData()各種方法進行syncData() 如何更新對話框?

在異步任務中,一旦下載進度將更新,onProgressUpdate方法將自動調用,但為此,您必須在doinBackground方法中發布此事件。因此,我認為不修改doInBackround()是不可能的。您必須調用publishProgress()方法在doInBackground()方法中。

我有一個代碼片段可以做到這一點,希望對您有所幫助,但是在此您必須在doInbackground()方法中調用publishProgress()方法。

 public YourClassConstructor(Context context)
{
    progressDialog = new ProgressDialog(context);
    progressDialog.setMessage("Your Message");
    progressDialog.setCancelable(false);
    progressDialog.setCanceledOnTouchOutside(false);
}
protected void onProgressUpdate(Integer... progress) {
 progressDialog.setMessage("Your Message "+progress);
}

@Override
protected Boolean doInBackground(Void... params){
    publishProgress(DOWNLOAD PROGRESS VALUE);

    return syncIn.syncData();
}

不,你必須調用publishProgress()從內部doInBackground()以獲得onProgressUpdate()被調用。

謝謝你的回答。

最后編寫了一個方法,該方法從syncData()的子方法中獲取一個String並使用publishProgress(),因此從技術上講,doInBackground()調用了publishProgress()。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM