2012-12-27 65 views
0

我遇到ProgressBar問題。我之前和進度條一起工作過,從未遇到過這個問題。執行後顯示ProgressBar

我有一個按鈕,一旦點擊,運行一個asynctask,這可能需要很長時間才能完成。所以,我設置了一個ProgressBar來顯示按鈕被點擊的時間。該代碼是這一個:

Button btnFollowing = (Button) findViewById(R.id.btnFollowing); 

    final ProgressBar pbFollowing = (ProgressBar) findViewById(R.id.progressBarFollowing); 

    btnFollowing.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      pbFollowing.setVisibility(View.VISIBLE); 
      ArrayList<String> friends = new ArrayList<String>(); 
      try {     
       GetFriends gf = new GetFriends(MainActivity.this); 
       friends = gf.execute("value").get();   
      } catch (InterruptedException e) { 
       Log.e("Exception MainActivity gettingfriends", e.toString()); 
      } catch (ExecutionException e) { 
       Log.e("Exception MainActivity gettingfriends", e.toString()); 
      } 
      setStringArrayPref(MainActivity.this, "friends", friends); 
      pbFollowing.setVisibility(View.INVISIBLE); 
     } 
    }); 

的問題是,在進度條不顯示在屏幕上,直到的AsyncTask結束,甚至調用setVisible線作爲創建的AsyncTask之前。

爲什麼會發生這種情況的任何想法?

感謝您的建議!

+0

你爲什麼把它設置爲隱形? – codeMagic

回答

1

的萬阿英,蔣達清是這一行:

friends = gf.execute("value").get(); 

執行將在後臺啓動任務,但調用get(),將等待執行完成,然後返回結果。因此,您的代碼將在此行中等待,直到AsyncTask完成,並且之後您的進度條將變得可見,因爲您使用get調用阻止了主線程。

您應該調用AsyncTask上的execute方法,然後使用AsyncTask的onPostExecute來執行您在執行結束時需要執行的操作。

+0

它的工作!非常感謝你。 – vdlow

0

的AsyncTask onPre ...將運行在GUI threead,它會顯示 的AsyncTask onPOST等將在GUI線程中運行過,你應該解僱/隱藏