2010-09-07 108 views
11

這將是很好,如果ProgressBar可以消失,直到它需要。在applyMenuChoice中使用setVisibility.progressBar有問題嗎?在PrintStatusTask()。execute()中使用setVisibility.progressBar的問題是它在運行時崩潰了應用程序。爲什麼setVisibility不能在Android ProgressBar上工作?

public class Controller extends Activity { 
    private ProgressBar progressBar; 
    ... 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.controller); 
     progressBar = (ProgressBar)findViewById(R.id.progressBar); 
     ... 

    private boolean applyMenuChoice(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.menuStatus: 
      progressBar.setVisibility(View.VISIBLE); 
      new PrintStatusTask().execute(); 
      progressBar.setVisibility(View.GONE); 
      ... 

回答

19
progressBar.setVisibility(View.VISIBLE); 
new PrintStatusTask().execute(); 
progressBar.setVisibility(View.GONE); 

這是你在做什麼: 1.顯示進度條 2.菌種在一個單獨的線程 3.隱藏的進度

這整個過程是要採取任務不超過幾毫秒即可執行。您需要隱藏PrintStatusTask類的onPostExecute()方法中的進度條。

您需要明白​​方法AsyncTask是執行另一個線程並且不會等待它完成的調用。這是AsyncTask的重點。

+0

明白了。謝謝。就是這樣。我還需要將setVisibility(View.VISIBLE)放在onPreExecute()中。的Bleh! – jacknad 2010-09-07 15:36:52

+0

is progressBar.setVisibility(View.GONE);刪除progressBar的最佳方法是什麼?我希望動畫停止在這種情況下,不吃表演... – OneWorld 2010-12-03 14:14:01

4

您是否想要在AsyncTask中隱藏ProgressBar?如果是這樣,則必須在onPreExecuteonPostExecute(與所有UI命令一樣)中完成。

此外,使用這樣的事情:

private void toggleProgressBar() { 
    switch (progressBar.getVisibility()) { 
    case View.GONE: 
     progressBar.setVisibility(View.VISIBLE); 
     break; 
    default: 
     progressBar.setVisibility(View.GONE); 
     break; 
    } 
} 
相關問題