2012-07-20 108 views
-1

因爲當我點擊按鈕,它等待20秒,然後讓文本到文本視圖,我的要求是1秒後,進度欄必須增加5個值。 任何一個可以指導我在下面的代碼進度條不按鈕更新點擊

public class ProgressBar1 extends Activity{ 

    TextView tvpbview; 
    ProgressDialog pd1; 
    ProgressBar pbhr1; 
    Button btnhp1; 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.progressbar1); 


     btnhp1 = (Button) findViewById(R.id.btnProgress); 
     pbhr1 = (ProgressBar) findViewById(R.id.pbHori1); 
     pbhr1.setMax(100); 


    btnhp1.setOnClickListener(new OnClickListener() { 

      public void onClick(View arg0) { 

       //--- For Horizontal Progress Bar------ 

       for(int i=0;i<=20;i++) 
       { 
        pbhr1.incrementProgressBy(5); 
        tvpbview.setText(""+pbhr1.getProgress()+"% done"); 
        try { 
         Thread.sleep(1000); 


        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 


       } 
      } 
     }); 
+0

你不應該在主線程中這樣做。因爲它會阻止整個活動。這是你應該擁有的第一個想法。創建一個新的線程,然後將消息發送到處理程序,並從那裏更新PB。 – 2012-07-20 15:54:02

回答

0

創建異步任務。 Android爲此提供了AsyncTask類。你在UI線程上創建一個進度條,然後調用publishProgress()方法來更新你的進度條。這非常簡單,文檔非常好。

0

試試這個

他們已經初步確定後,如果您想要再改變你需要設置的值之間的零在:

ProgressBar dataProgressBar = (ProgressBar) findViewById(R.id.progressBarData); 

    //set to 0 first to stop the bug from happening 

    dataProgressBar.setMax(0); 
    dataProgressBar.setProgress(0); 

    //set your new values 

    dataProgressBar.setMax((int) dataAllowanceValue); 
    dataProgressBar.setProgress((int) dataMBytes); 
1

你的做法是不正確,則需要使用正確的線程形式。特別是對於你的情況我建議您使用以下:

最有可能你需要閱讀一些教程在


注:AsyncTaskHandler更復雜,也就是通用型和專爲一些最新進展情況UI