2013-03-07 58 views
7

我試圖表現出水平進度條上這樣 enter image description here水平進度條不更新其狀態

在這裏我的活動「不ProgressDialog」是我的XML文件中包含

<ProgressBar 
    android:id="@+id/pdialog" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"   
    android:indeterminate="true" 
    /> 

我試圖通過設置pdialog.setProgress()使用AsyncTask Class來更新其狀態,但它沒有顯示任何進度,它可以與progressdialog一起使用,但不能與水平進度條一起使用。

public class MainActivity extends Activity { 

private SQLiteDatabase db; 
private Cursor cursor; 
private ProgressBar pdialog; 
private ImageButton btn; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.start); 
    btn = (ImageButton) findViewById(R.id.startbtn); 
    pbar = (ProgressBar) findViewById(R.id.progressBar1); 
    pdialog = (ProgressBar) findViewById(R.id.pdialog); 
    pdialog.setMax(100); 
    pdialog.setProgress(20); 
    btn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      pdialog.setVisibility(View.VISIBLE); 
      new DownloadFilesTask().execute(); 

     } 
    }); 
} 

private class DownloadFilesTask extends AsyncTask<Void, Integer, Integer> { 

    int load = 1; 

    protected Integer doInBackground(Void... params) { 

     try { 
       load = 10 * i; 
       MainActivity.this.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         pdialog.setProgress(load); 
        } 
       }); 

      } 

     } catch (Exception e) {  

     } 

    } 

    protected void onProgressUpdate(Integer... progress) { 

     if (progress[0] == 100) { 
      pdialog.setVisibility(View.INVISIBLE);   

     } 
    } 

    protected void onPostExecute(Integer params) {  

    } 

} 
} 
+0

你在哪裏增加......? – 2013-03-07 06:54:08

+0

我有很長的代碼,所以我只是把它縮短,我在我的doinbackground()增加了[i],但它沒有更新所有的 – 2013-03-07 06:57:47

+0

試試這個任何http://eagle.phys.utk.edu/guidry /android/progressBarExample.html和http://blog.webagesolutions.com/archives/170,並檢查我的值是否正確遞增或不遞增 – itsrajesh4uguys 2013-03-07 06:59:33

回答

4

如果load變量被更改正確:

取而代之的是:

MainActivity.this.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         pdialog.setProgress(load); 
        } 
       }); 

你可以使用:

publishProgress(load); 

這將在UI線程自動調用:

protected void onProgressUpdate(Integer... progress) { 
    int p = progress[0]; 
    if (p >= 100) { 
     pdialog.setVisibility(View.INVISIBLE);   
    }else{ 
     pdialog.setProgress(p); 
    } 
} 

UPDATE:

刪除android:indeterminate="true"在其他的答案中指出。

+0

我試着把我的setprogress()放在OnProgressUpdate中,但結果是一樣的nt更新 – 2013-03-07 07:22:20

+0

@VivekSingh在'pdialog.setProgress(p)'處添加一個斷點,在調試模式下運行並檢查:代碼是否達到了這一點?如果是這樣,「進度」變量的值是多少? – 2013-03-07 07:23:59

+1

精湛的配對.. +1爲刪除android:indeterminate =「true」 – 2013-10-07 06:09:36

4

在您的佈局文件中請刪除以下屬性android:indeterminate="true"ProgressBar元素。

+0

感謝它的工作。榮譽!! – 2013-03-07 08:26:51

0

我有同樣的問題,但 我發現問題是接口View.OnClickListener()。 當pbar不在btn.setOnClickListener(new View.OnClickListener(){})中時,它運行良好。否則,它不會更新。 然後,我做了一個構造函數,將pbar傳入OnXXXClickListener。

private class OnXXXClickListener implements View.OnClickListener() { 
 
     private ProgressBar bar; 
 

 
     public OnXXXClickListener(ProgressBar bar) { 
 
      this.bar = bar; 
 
     } 
 

 
     @Override 
 
     public void onClick(View v) { 
 

 
      bar.setProgess(50); 
 
      new DownloadFilesTask().execute(); 
 

 
     } 
 

 
}

然後PBAR能很好地工作。