首先感謝您閱讀本文。 我無法通過AsyncTask內部類更新自定義ProgressBar的進度。我使用9patch作爲背景和進度繪圖。它只是不更新。它留在那裏所有填充像它是在最大值,我使用onProgressUpdate()來調用invalidate()並更新UI線程。自定義ProgressBar不會更新。 (AsyncTask + 9patch)
這裏是什麼樣子,現在,它會可見光和就停在那兒所有的填充:http://imageshack.us/photo/my-images/651/mobicashprogressbar.png/
- 的進度應該只 可見用戶總結了 形式之後。
- 還有另一個內部AsyncTask處理髮送SMS按鈕,它與Web服務連接。
繼承人的代碼:
public void setTimerProgress(int progress){
progressBar.setProgress(progress);
}
public void updateProgress(){
progressBar.invalidate();
}
public void showProgress(){
progressBar.setVisibility(View.VISIBLE);
}
//Classe auxiliar para controle da progress bar
private class TimerProgress extends AsyncTask<Void, Void, Void>{
private int start;
private final int OTP_TIMEOUT = 900000;
@Override
protected void onPreExecute() {
super.onPreExecute();
showProgress();
start = (int) System.currentTimeMillis();
}
@Override
protected Void doInBackground(Void... param) {
int timer = (int) System.currentTimeMillis() - start;
while (timer <= OTP_TIMEOUT){
setTimerProgress(timer);
timer = (int) System.currentTimeMillis() - start;
publishProgress();
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
updateProgress();
}
}
這裏的XML:
<ProgressBar
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_gravity="center_horizontal"
android:visibility="invisible"
android:id="@+id/progress_bar_timer"
android:max="900000"
android:progress="3000"
android:progressDrawable="@drawable/progress_bar"
android:background="@drawable/progress_background"
android:layout_width="fill_parent"
android:layout_height="25dip"
android:layout_marginRight="73sp"
android:layout_marginLeft="70sp">
</ProgressBar>
這裏有一個地方,我把它叫做
@Override
public void onClick(View v) {
if (v.getId() == R.id.refresh_otp) {
saveParametersForOTP();
if (edtIniPin.getText().length() == pinLengthInt) {
try {
disableEditText(edtIniPin);
disableEditText(edtValue);
edtOTP.setText(Facade.getInstance().nextOTP(Facade.getInstance().getPin(), Facade.getInstance().getValue()));
//Inicia o timer da progressbar
new TimerProgress().execute();
幫助? :d
UPDATE:
對於測試purpuses我已經設置了OTP_TIMEOUT 50000,作了如下修改代碼並刪除了9patch可繪製屬性,以便它可以使用本地可繪製了吧。它可以工作,但是,當我使用圖像來自定義欄時,它看起來也出現了同樣的老問題。它是靜態的,全部像以前一樣填滿。
private final int OTP_TIMEOUT = 50000;
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.i("PROGRESS", "Chegou no PreExecute!");
showProgress();
ENABLE_REFRESH = false;
start = (int) System.currentTimeMillis();
}
@Override
protected Void doInBackground(Void... param) {
int timer = (int) System.currentTimeMillis() - start;
while (timer <= OTP_TIMEOUT){
Log.i("PROGRESS", "Chegou no while!");
setTimerProgress((int)timer);
timer = (int) System.currentTimeMillis() - start;
publishProgress();
if (timer >= OTP_TIMEOUT) {
ENABLE_REFRESH = true;
}
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
Log.i("PROGRESS", "Chegou no Progress Update!");
updateProgress();
}
請問,如果你刪除了XML的progressDrawable和背景線工作的? – kodi 2011-06-02 18:10:39
不,不是。 :(它似乎全部是空的,當我刪除progressDrawable和背景... – 2011-06-03 13:42:00
檢查我的更新它現在工作,沒有自定義drawables ...但我需要它定製 – 2011-06-03 14:14:06