Android如何更新ProgressBar的值?

Android如何更新ProgressBar的值?,第1张

概述我的活动有一个ProgressBar.当开始活动时,我会检查从另一个地方获取的值并更新到ProgressBar.这是我的代码: final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar_detail);final TextView progressText = (TextView) findViewBy 我的活动有一个Progressbar.当开始活动时,我会检查从另一个地方获取的值并更新到Progressbar.这是我的代码:
final Progressbar progressbar = (Progressbar) findVIEwByID(R.ID.progressbar_detail);final TextVIEw progresstext = (TextVIEw) findVIEwByID(R.ID.progresstext_detail);final ImageVIEw btnCancel = (ImageVIEw) findVIEwByID(R.ID.imgCancel_detail);progressbar.setVisibility(VIEw.VISIBLE);progresstext.setVisibility(VIEw.VISIBLE);btnCancel.setVisibility(VIEw.VISIBLE);Thread t = new Thread() {    public voID run() {        ((Activity) ctx).runOnUiThread(new Runnable() {            public voID run() {                int oldProgress = 0;                while (progressbar.getProgress() < 100) {                    int value = Downloader.progress.get(gameID+ "");                    if (value != oldProgress) {                        oldProgress = value;                        progressbar.setProgress(value);                        progresstext.setText(value + " %");                    }                }            }        });    }};t.start();

Progressbar的值来自int value = Downloader.progress.get(gameID)并且它是正确的.但是,当我运行此代码时,活动没有响应,也没有显示任何内容(但应用程序没有崩溃).看起来像更新Progressbar的线程正在运行并阻止UI线程,因此活动布局没有显示.

我的代码出了什么问题?在这种情况下更新Progressbar的正确方法是什么?

解决方法 您正在UI线程中运行一段时间(progressbar.getProgress()< 100)(您使用runOnUiThread),因此UI线程将被阻止(并且不会被绘制),直到此循环结束. 您可以:
>将runOnUiThread放入循环中,也许在de runOnUiThread调用内部进行休眠.但是,它不是首选的解决方案,因为您使用太多cpu来查找值更改.睡眠接近它有点难看但解决了cpu问题.它会像::
Thread t = new Thread() {    public voID run() {    int oldProgress = 0;    while (progressbar.getProgress() < 100) {            ((Activity) ctx).runOnUiThread(new Runnable() {                public voID run() {                    int value = Downloader.progress.get(gameID+ "");                    if (value != oldProgress) {                        oldProgress = value;                        progressbar.setProgress(value);                        progresstext.setText(value + " %");                    }                }            }            Thread.sleep(500);        }    });  }};

>以事件方式更新进度条,以便在进度更改时仅调用(在UI线程中)更新代码.这是首选方式.

总结

以上是内存溢出为你收集整理的Android如何更新ProgressBar的值?全部内容,希望文章能够帮你解决Android如何更新ProgressBar的值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1131053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存