Android 进度条未更新

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)

Xar*_*mer 7

这是 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)

它也可能对某人有用。