2010-09-07 43 views
11

Sẽ rất tuyệt nếu ProgressBar có thể được thực hiện để biến mất cho đến khi cần thiết. Có vấn đề gì khi sử dụng setVisibility.progressBar trong applyMenuChoice? Vấn đề với việc sử dụng setVisibility.progressBar trong PrintStatusTask(). Execute() là nó treo ứng dụng trong suốt thời gian chạy.Tại sao setVisibility không hoạt động trên 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); 
      ... 

Trả lời

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

Đây là những gì bạn đang làm: 1. Hiện ProgressBar 2. đẻ trứng một nhiệm vụ trên một sợi riêng biệt 3. Ẩn ProgressBar

toàn bộ quá trình này sẽ mất không quá một vài mili giây để thực thi. Bạn cần phải ẩn thanh tiến trình trong phương thức onPostExecute() của lớp PrintStatusTask.

Bạn cần hiểu rằng phương thức execute()AsyncTask là cuộc gọi thực hiện một chuỗi khác và không đợi kết thúc. Đó là loại toàn bộ quan điểm của AsyncTask.

+0

Got nó. Cảm ơn. Điều đó là vậy đó. Tôi cũng cần đặt setVisibility (View.VISIBLE) trong onPreExecute(). bleh! – jacknad

+0

Là progressBar.setVisibility (View.GONE); cách tốt nhất để loại bỏ progressBar là gì? Tôi hy vọng hoạt ảnh dừng lại trong trường hợp này và không ăn hiệu suất ... – OneWorld

4

Bạn đang cố gắng ẩn số ProgressBar trong số AsyncTask? Nếu vậy, nó phải được thực hiện trong onPreExecute hoặc onPostExecute (giống như tất cả các lệnh giao diện người dùng).

Ngoài ra, sử dụng một cái gì đó như thế này:

private void toggleProgressBar() { 
    switch (progressBar.getVisibility()) { 
    case View.GONE: 
     progressBar.setVisibility(View.VISIBLE); 
     break; 
    default: 
     progressBar.setVisibility(View.GONE); 
     break; 
    } 
} 
Các vấn đề liên quan