ume*_*k44 0 multithreading android progressdialog
我在更新进度条时遇到问题。我正在单独的线程中更新进度条,并在另一个线程中更新进度条进度所依赖的变量(这是一个类变量)。因此,进度对话框显示但始终为 0% 不更新进度。请帮帮我。
public void setProgressbar()
{
progressBar = new ProgressDialog(context);
progressBar.setCancelable(true);
progressBar.setMessage("File downloading ...");
progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressBar.setProgress(0);
progressBar.setMax(100);
progressBar.show();
Thread thread = new Thread()
{
public void run()
{
while(progressBar.getProgress() < 100)
{
Log.v("progressbar", getProgress()+"");
progressBar.setProgress(getProgress());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
thread.start();
Run Code Online (Sandbox Code Playgroud)
更新值代码
Thread thread = new Thread()
{
public void run()
{
.
.
.
while((bytesRead = is.read(bytearray, 0, bytearray.length)) != -1)
{
bos.write(bytearray, 0, bytesRead);
totaldownload = totaldownload + bytesRead;
Log.v("downloadign ", totaldownload+"");
// progressBar.setProgress((int) ((totaldownload/sizeoffile) * 100));
}
bos.close();
.
.
.
};
thread.start()
Run Code Online (Sandbox Code Playgroud)
和 getPrgoress 方法
public int getProgress()
{
return (int) ((totaldownload/sizeoffile) * 100);
}
Run Code Online (Sandbox Code Playgroud)
这是 ProgressBar 中的一个错误!
如果再次传递相同的值,setProgress(...)
似乎不会触发更新drawable
。但它也不会在 期间触发setMax
。所以缺少更新。
为了解决这个问题,我只是bar.setProgress(0)
在每次更新之前做一个......这只是一种解决方法,但它按预期对我有用:
bar.setProgress(0); // call these two methods before setting progress.
bar.setMax(20);
bar.setProgress(20);
Run Code Online (Sandbox Code Playgroud)
第二个选项。
mSeekBar.post(new Runnable() {
@Override
public void run() {
mSeekBar.setProgress(percentOfFullVolume);
}
});
Run Code Online (Sandbox Code Playgroud)
它也可能对某人有用。
归档时间: |
|
查看次数: |
10540 次 |
最近记录: |