如何在Android中使用计时器设置进度条?

时间:2012-03-02 12:31:03

标签: java android timer android-widget android-ndk

我已经学会了如何让进度条与特定任务from here一起使用。

但我在我的应用程序中使用计时器。基于该值,我想设置ProgressBar。

那怎么做。 ?

我让这个线程起作用了。 代码:

// Start lengthy operation in a background thread         
    progressThread = new Thread(new Runnable() {             
        public void run() {                 
            while (mProgressStatus < 100) {                     
                mProgressStatus = doWork();                     
                // Update the progress bar                     
                mHandler.post(new Runnable() {                         
                    public void run() {                             
                        progressBar.setProgress(mProgressStatus);                         
                    }                     
                });                 
            }             
        }         
    });

    progressThread.start();

我知道我必须创建连续将int数据返回到progressStatus的任务。但是如何用天文台做我不知道的事情。所以请帮助我。

感谢。

1 个答案:

答案 0 :(得分:1)

您的问题似乎是您的doWork()方法(正如您在评论中提到的那样,该方法中没有任何操作)。正如您所看到的,progressBar的进度取决于此方法:

mProgressStatus = doWork();

让我们假设您的计时器每秒更新一次,因此当100秒通过时,progressBar将会满。要实现这一点,你的doWork方法应该返回增加的秒数值,即1,2,3 ...到100.但仅返回该值是不够的,因为使用当前代码,progressBar将立即填充。 /> 最简单的解决方案是:

mProgressStatus = 0;
progressThread = new Thread(new Runnable() {             
    public void run() {                 
        while (mProgressStatus < 100) {                                          
            // Update the progress bar                     
            mHandler.post(new Runnable() {                         
                public void run() {                             
                    progressBar.setProgress(mProgressStatus);                         
                }                     
            });
            mProgressStatus ++;
            android.os.SystemClock.sleep(1000); // Thread.sleep() doesn't guarantee 1000 msec sleep, it can be interrupted before               
        }             
    }         
});

progressThread.start();

希望这有帮助,
谢尔盖。