我在片段中使用Seekbar
,需要将Seekbar
移动到不同的位置。但是,setProgress(xxx)
无效。
如何以编程方式为Seekbar
:public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
触发此方法?手动移动Seekbar
可以正常工作。
答案 0 :(得分:13)
这是ProgressBar中的Bug!
如果再次传递相同的值,则setProgress(...)
似乎不会触发drawable
上的更新。但它也不会在setMax期间触发。因此缺少更新。
要解决这个问题,我只是在每次更新之前做一个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);
}
});
它也适用于某人。
尝试先设置最大值,然后设置进度。
答案 1 :(得分:3)
我添加这个答案,因为这可以帮助将来的某个人 在我的情况下,我也认为setProgress不能正常工作,但这是我的错误。
increaseIncomeSeekBar.setProgress(progress);
increaseIncomeSeekBar.setMax(maxProgress);
对于信息进度和maxProgress等于2000和12000.但是当显示SeekBar时,似乎进度为0,因此无法正常工作。
当你知道它时,你必须意识到这一点是非常合乎逻辑的:
答案 2 :(得分:2)
我在这个主题上添加了评论,因为它发生在我身上,花了我几个小时来弄清问题是什么。该错误仍处于活动状态, setProgress ()方法有时无法正常工作。
我有一个MainActivity,它提交并替换 Fragments ,并在每个Fragments的包中传输 SeekBar 值。用户更改Seekbar的值并将其进度放在 Bundle 中。然后,当用户切换片段时,新的获得 SeekBar 进度。
以这种方式传输它非常好,我在第二个片段中的进度变量上总是有正确的值。当我使用 setProgress (theProgressValueTransmitted)方法时出现问题。这仅在我第一次替换第一个片段时才设置 SeekBar 进度。在此之后,它永远不会改变它,因为进步的价值仍然是正确的。
我用过:
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年了,我甚至不知道这个bug是如何存在的,因为它已被报道。
答案 3 :(得分:1)
SeekBar.setProgress()
应该可以正常工作。您确定您的代码是在UI线程上执行的吗?如果没有,那么这将是一个明显的解释。检查API文档中的ProgressBar
https://developer.android.com/reference/android/widget/ProgressBar.html
在那里,他们展示了如何将执行带回主线程。
答案 4 :(得分:1)
现在一切似乎都按预期工作了
不再需要发布。
只是做:
seekBar.setMax(200);
seekBar.setProgress(50);
(顺序并不重要)
答案 5 :(得分:0)
大多数时候,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);
//...
}