【发布时间】:2011-05-19 21:09:31
【问题描述】:
显示游戏进度的两个条形图。如果用户获得积分或时间已到等,则应该更新进度条:
private TextView tv;
private ProgressBar levelHoldBar;
private ProgressBar levelUpBar;
//...
private void updateViews() {
// ...
levelHoldBar.setMax(currentLevel.getThreshold());
levelHoldBar.setProgress(currentPoints > currentLevel.getThreshold() ? currentLevel.getThreshold() : currentPoints);
levelUpBar.setMax(nextLevel.getThreshold());
levelUpBar.setProgress(currentPoints > nextLevel.getThreshold() ? nextLevel.getThreshold() : currentPoints);
tv.setText(currentPoints+"/"+currentLevel.getThreshold());
Log.d(TAG, "hold prog/max "+levelHoldBar.getProgress()+"/"+levelHoldBar.getMax());
Log.d(TAG, "up prog/max "+levelUpBar.getProgress()+"/"+levelUpBar.getMax());
}
即。输出:
12-03 17:48:33.918: DEBUG/MainActivity(6829): hold prog/max 20/20
12-03 17:48:33.918: DEBUG/MainActivity(6829): up prog/max 20/50
最后的 Log.d(...) 显示 ALWAYS 正确的值,但 SOMETIMES 进度条的可视条不显示正确的进程。即使“max”和“progress”的获取器返回正确的值,它们也会显示先前设置的进度(在示例中,该条显示 levelHoldBar 的大约 20%(而不是 100%)和大约 2%(而不是 40 %) 用于 levelUp-bar)。我不明白,为什么日志输出是正确的,但绘图是错误的!? TextView (tv) 已正确更新!这里发生了什么?我该如何解决?
【问题讨论】:
-
好吧,先问愚蠢的问题 - 1) 您正在 UI 线程中进行更新,2) 您在任何地方都没有任何自定义绘图功能?
-
是的,我在 UI 线程上运行它,我没有任何自定义图纸。它总是使用相同的调用堆栈进行更新,有时条形图会更新,有时它们不会更新。这很奇怪^^
-
好的。有什么可疑的。当您将活动简化为例如每次按下按钮时将进度条修改为“上一个值 + 1”时会发生什么? ProgressBars 非常简单,所以我们需要从一个简单的设置开始到您当前拥有的内容,然后找出它在哪个点中断。
-
显示您如何调用 updateViewS()。你几乎可以肯定在某个线程中比赛。
-
查看其他评论.. 在那里我发布了我如何在 UI 线程上调用 updateViews() ......但问题是 ProgressBar 的意外行为:查看我自己的答案......似乎一个错误。我已经举报了。也许你可以确认一下。 API 7 级
标签: android progress-bar