2013-10-06 50 views
3

我試圖從主Activity實例化Progress Bar並將其動態添加到視圖中。當我這樣做,我得到一個酒吧:編程的Android進度條風格

ProgressBar bar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); 
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
bar.setLayoutParams(params); 
bar.setId(mInt); 
LinearLayout layout = (LinearLayout) findViewById(R.id.layout); 
layout.addView(bar); 

我開始一個新項目,只包含上面的代碼,和進度條顯示正確。

如果我將以下代碼行添加到上面的代碼中,屏幕空白一秒鐘,然後顯示一個半滿的條。我希望看到一秒鐘空的酒吧,然後達到50%。

try { 
    Thread.sleep(2000); 
} catch ...{ 
} 
bar.setProgress(50); 

但是,如果我添加一些這樣的代碼,則欄和更改顯示正確。

Button b = new Button(this); 
     b.setText("change bar"); 
     b.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       changeProg(); 
      } 
     }); 

public void changeProg() { 
     switch (state) { 
     case 0: bar.setProgress(100); state = 1; break; 

     case 1: bar.setProgress(127); state = 2; break; 

     case 2: bar.setProgress(33); state = 0; break; 
     } 
    } 

如果我嘗試的過程與循環自動調用changeProg()每隔一段時間,屏幕只是停留空白 - 沒有小部件都顯示,無論它們是由XML描述或Pro語法上沒有什麼區別。

我無法理解此行爲存在的原因。

回答

0

SetProgress尖端:

設置當前進展到規定值。如果進度欄處於不確定模式,則不執行任何操作。

所以你要撥打:

bar.setIndeterminate(假);

1

看來你從UI線程調用Thread.sleep(2000),這會導致問題,甚至創建ANR。嘗試創建一個新線程(單獨的線程)來更改進度值。

請參見下面的例子:

https://stackoverflow.com/a/17758416/3922207

0
ProgressBar pdialog = new ProgressBar(context,null, android.R.attr.yourcustomstyle); 

,並檢查您apptheme風格