我在片段中使用Seekbar,需要将Seekbar移动到不同的位置。但是,setProgress(xxx)不起作用。
如何以编程方式为Seekbar:public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)触发此方法?手动移动Seekbar可以很好地工作。
发布于 2015-02-10 21:41:16
这是ProgressBar中的一个错误!
如果再次传递相同的值,则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);
}
});它也可能对某些人有效。
先尝试设置最大值,然后再设置进度。
发布于 2015-01-14 11:00:35
我添加了这个答案,因为这可以在未来帮助别人。
在我的例子中,我也认为setProgress没有正常工作,但这是我的错误。
increaseIncomeSeekBar.setProgress(progress);
increaseIncomeSeekBar.setMax(maxProgress);表示信息进度,maxProgress等于2000和12000。但在显示SeekBar时,进度似乎为0,因此无法正常工作。
你必须意识到这一点,当你知道这一点时,这是非常合逻辑的:
发布于 2017-11-26 00:08:15
我在这个话题上添加了一个评论,因为它发生在我身上,我花了几个小时才弄清楚问题是什么。该错误仍处于活动状态,setProgress()方法有时无法正常工作。
我有一个MainActivity,它提交并替换片段,并在每个片段的捆绑包中传输SeekBar值。用户更改Seekbar的值,并将其进度放入包中。然后,当用户切换分片时,新的分片会得到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还会存在,因为它已经被报道了。
https://stackoverflow.com/questions/17313197
复制相似问题