2011-06-02 111 views
0

首先感謝您閱讀本文。 我無法通過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(); 
    } 
+0

請問,如果你刪除了XML的progressDrawable和背景線工作的? – kodi 2011-06-02 18:10:39

+0

不,不是。 :(它似乎全部是空的,當我刪除progressDrawable和背景... – 2011-06-03 13:42:00

+0

檢查我的更新它現在工作,沒有自定義drawables ...但我需要它定製 – 2011-06-03 14:14:06

回答

3

您需要添加一個圖層列表的資源和配置您的進度來使用它。

這裏是我使用的一個例子。請注意,progress_bar.xml中的progress_bar_progress和progress_bar_background是九個補丁圖像。

progress_bar.xml:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@android:id/background" android:drawable="@drawable/progress_bar_background" /> 
    <item android:id="@android:id/progress" > 
     <clip android:drawable="@drawable/progress_bar_progress" /> 
    </item> 
</layer-list>list> 

佈局片段:

<ProgressBar 
    android:layout_width="fill_parent" 
    android:layout_height="30dp" 
    android:max="100" 
    android:progress="50" 
    android:progressDrawable="@drawable/progress_bar" 
    android:indeterminateOnly="false" />