2014-02-11 99 views
-1

我有一個進度條,我不想合併一個數值來顯示某些內容的加載。我只想讓ProgressBar顯示,動畫,然後消失。Android進度條出現和隱藏

我使用:

public void buttonClick(View v){ 
     ProgressBar mProgress=(ProgressBar)findViewById(R.id.my_progress); 
     mProgress.setVisibility(VISIBLE);  //line 1.. 

     //loading data from web... takes time 

     mProgress.setVisibility(INVISIBLE); //line 2.. 
} 

但是當運行此代碼,無論第1行和第2行執行,但事後的用戶界面的變化,這是不希望的。我希望當按鈕被點擊時,進度條應該出現,當數據從網上下載時,進度條應該消失。

我試着從另一個線程設置可見性,但它不起作用,因爲在其他線程中不允許UI更改。

回答

1

你下載你的數據在AsyncTask的權利?將這個代碼

private class DownloadData extends AsyncTask<Void, Void, Void>{ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgress.setVisibility(View.VISIBLE); 
    } 
    @Override 
    protected Void doInBackground(Void... params) { 
     // download your data here 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     mProgress.setVisibility(View.GONE); 
    } 
} 
1

的最好方法通過使用AsyncTask

MyTask.java

class MyTask extends AsyncTask<Void, Void, Void> { 
    ProgressDialog dialog; 
    Context context; 
    MyTask(Context context){ 
     this.context=context; 
    } 
    @Override 
    protected void onPreExecute() { 
     dialog=new ProgressDialog(context); 
     dialog.setMessage("Please wait..."); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 
    @Override 
    protected Void doInBackground(Void... params) { 
     //do your task here 
    } 
    @Override 
    protected void onPostExecute(Void result) { 
     if(dialog.isShowing()){ 
      dialog.dismiss(); 
     } 
    } 
} 

實現它你可以這樣開始的任務:

public void buttonClick(View v){ 
    new MyTask(YourActivity.this).execute(); 
} 

您可以修改AsyncTask acc或者檢索結果。

希望它有幫助。 :)