在我的活动中,我按如下方式设置了进度条:
bar = (ProgressBar) findViewById( R.id.download_progress_bar );
bar.setProgress( 0 );
bar.setMax( 100 );
我有一个可以更新某些文本和进度条的runnable。文本更新工作正常,但进度条没有。这是runnable:
private class UpdateDownload implements Runnable
{
private int downloadSize;
public UpdateDownload( int downloadSize )
{
this.downloadSize = downloadSize;
}
public void run()
{
textDownloaded.setText( String.format( "%d / %d kB", downloadSize / 1024, currentFileSize / 1024 ) );
textTotalDownloaded.setText( String.format( "%d / %d kB", ( downloadSize + bytesSoFar ) / 1024, totalSize / 1024 ) );
bar.setSecondaryProgress( downloadSize / currentFileSize / 100 );
bar.setProgress( ( downloadSize + bytesSoFar ) / totalSize / 100 );
}
}
答案 0 :(得分:0)
你的数学错了。放入setProgress
的值必须介于0和最大值之间,在您的情况下为100。
所以:
bar.setProgress( 100 * ( downloadSize + bytesSoFar ) / totalSize );
答案 1 :(得分:0)
请完成本文:http://developer.android.com/resources/articles/painless-threading.html。
我建议您使用 AsyncTask
,这里有链接以获取有关AsyncTask的更多信息:http://developer.android.com/reference/android/os/AsyncTask.html。
现在,在我们可以在AsyncTask中使用的4种方法中,使用 onProgressUpdate()
更新进度条值。
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}