2013-03-07 33 views
7

Tôi cố gắng để hiển thị thanh tiến trình ngang "Không ProgressDialog" trên hoạt động của tôi như thế này enter image description herethanh tiến ngang không cập nhật tình trạng của nó

đây là những gì tập tin xml của tôi chứa

<ProgressBar 
    android:id="@+id/pdialog" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"   
    android:indeterminate="true" 
    /> 

Tôi đang cố gắng để cập nhật trạng thái của nó bằng cách sử dụng AsyncTask Class bằng cách thiết lập pdialog.setProgress() nhưng nó không hiển thị bất kỳ tiến bộ nào, nó làm việc với progressdialog nhưng không phải với thanh tiến trình nằm ngang.

public class MainActivity extends Activity { 

private SQLiteDatabase db; 
private Cursor cursor; 
private ProgressBar pdialog; 
private ImageButton btn; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.start); 
    btn = (ImageButton) findViewById(R.id.startbtn); 
    pbar = (ProgressBar) findViewById(R.id.progressBar1); 
    pdialog = (ProgressBar) findViewById(R.id.pdialog); 
    pdialog.setMax(100); 
    pdialog.setProgress(20); 
    btn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      pdialog.setVisibility(View.VISIBLE); 
      new DownloadFilesTask().execute(); 

     } 
    }); 
} 

private class DownloadFilesTask extends AsyncTask<Void, Integer, Integer> { 

    int load = 1; 

    protected Integer doInBackground(Void... params) { 

     try { 
       load = 10 * i; 
       MainActivity.this.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         pdialog.setProgress(load); 
        } 
       }); 

      } 

     } catch (Exception e) {  

     } 

    } 

    protected void onProgressUpdate(Integer... progress) { 

     if (progress[0] == 100) { 
      pdialog.setVisibility(View.INVISIBLE);   

     } 
    } 

    protected void onPostExecute(Integer params) {  

    } 

} 
} 
+0

nơi bạn đang tăng dần ...? –

+0

tôi có mã dài vì vậy tôi chỉ cần cắt nó ngắn, tôi đang tăng [i] trong doinbackground của tôi() nhưng không updataing của nó ở tất cả –

+0

có một thử với bất kỳ http://eagle.phys.utk.edu/guidry này /android/progressBarExample.html và http://blog.webagesolutions.com/archives/170 và cũng kiểm tra giá trị của i một cách chính xác cho dù nó tăng hay không – itsrajesh4uguys

Trả lời

4

Nếu load biến được thay đổi một cách chính xác:

Thay vì điều này:

MainActivity.this.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         pdialog.setProgress(load); 
        } 
       }); 

Bạn có thể sử dụng:

publishProgress(load); 

đó sẽ tự động gọi vào UI Thread:

protected void onProgressUpdate(Integer... progress) { 
    int p = progress[0]; 
    if (p >= 100) { 
     pdialog.setVisibility(View.INVISIBLE);   
    }else{ 
     pdialog.setProgress(p); 
    } 
} 

CẬP NHẬT:

xóa android:indeterminate="true" như được chỉ ra trong câu trả lời khác.

+0

tôi đã thử bằng cách đặt setprogress() của mình trong OnProgressUpdate nhưng kết quả cũng giống như của nó nt cập nhật –

+0

@VivekSingh Thêm điểm ngắt tại 'pdialog.setProgress (p)', chạy trong chế độ gỡ lỗi và kiểm tra: Mã có đạt đến điểm này không? Nếu có, giá trị của biến 'tiến trình' là gì? –

+1

Người bạn đời tuyệt vời .. +1 để xóa android: không xác định = "true" –

4

Trong tệp bố cục của bạn, vui lòng xóa thuộc tính sau android:indeterminate="true" từ yếu tố ProgressBar.

+0

Cảm ơn bạn đã làm việc. kudo !! –

0

Tôi có cùng một câu hỏi, nhưng Tôi thấy vấn đề là giao diện View.OnClickListener(). Khi pbar được đưa ra khỏi btn.setOnClickListener (mới View.OnClickListener() {}), nó hoạt động tốt. Nếu không, nó không cập nhật. Sau đó, tôi đã tạo một hàm tạo thông qua thanh công cụ vào OnXXXClickListener.

private class OnXXXClickListener implements View.OnClickListener() { 
 
     private ProgressBar bar; 
 

 
     public OnXXXClickListener(ProgressBar bar) { 
 
      this.bar = bar; 
 
     } 
 

 
     @Override 
 
     public void onClick(View v) { 
 

 
      bar.setProgess(50); 
 
      new DownloadFilesTask().execute(); 
 

 
     } 
 

 
}

Sau đó pbar có thể làm việc tốt.

Các vấn đề liên quan