[英]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.