我在一个片段中使用了Seekbar
,需要将Seekbar
移动到不同的位置,但是setProgress(xxx)
没有起作用。
如何以编程方式触发此方法以控制Seekbar
: public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
? 手动移动Seekbar
可以正常工作。
我在一个片段中使用了Seekbar
,需要将Seekbar
移动到不同的位置,但是setProgress(xxx)
没有起作用。
如何以编程方式触发此方法以控制Seekbar
: public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
? 手动移动Seekbar
可以正常工作。
ProgressBar 中存在一个 Bug!
setProgress(...)
函数似乎在再次传递相同值时不会触发 drawable
的更新。但是在设置最大值时也不会触发更新,所以造成了更新缺失。
为了解决这个问题,我只是在每次更新之前执行了 bar.setProgress(0)
,这只是一个临时的解决方法,但对于我来说效果很好:
bar.setProgress(0); // call these two methods before setting progress.
bar.setMax(20);
bar.setProgress(20);
第二个选项。
mSeekBar.post(new Runnable() {
@Override
public void run() {
mSeekBar.setProgress(percentOfFullVolume);
}
});
对于某些人来说,它可能也有效。
先尝试设置最大值,然后再设置进度。
我添加这个答案是为了帮助未来的某个人。
在我的情况下,我也认为setProgress没有正常工作,但这是我的错误。
increaseIncomeSeekBar.setProgress(progress);
increaseIncomeSeekBar.setMax(maxProgress);
关于 info 的进度和最大进度均为 2000 和 12000。但是在显示 SeekBar 时,似乎进度为 0,因此无法正常工作。
你必须要知道这一点,当你了解它的逻辑时就很容易理解:
int seekBarProgress;
Bundle bundle = this.getArguments();
if (bundle != null) {
seekBarProgress = bundle.getInt("seekBarProgress");
mySeekBar.post(new Runnable() {
@Override
public void run() {
eventListTimeSeekBar.setProgress(seekBarProgress);
}
});
}
这是我能使它正常工作的唯一方法,希望对有同样问题的人有所帮助。此帖子已经超过4年了,我甚至不理解为什么这个错误还存在,因为它已经被报告。
seekBar.setMax(200);
seekBar.setProgress(50);
(顺序无关紧要)
SeekBar.setProgress()
应该可以正常工作。你确定你的代码在UI线程上执行吗?如果不是,则这将是明显的解释。请检查进度条API文档中的示例。
https://developer.android.com/reference/android/widget/ProgressBar.html
他们展示了如何将执行带回主线程。大多数情况下,SeekBar运行良好。但有时候会出现问题。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//...
seekBar.setProgress(value);
//...
}
在我使用detach() + attach()刷新片段视图后,代码无法正常工作。我的解决方案是在onViewStateRestored()中应用setProgress()。
@Override
public void onViewStateRestored(Bundle inState) {
//...
seekBar.setProgress(value);
//...
}