使用SeekBar和setProgress不会改变seekBar位置

sow*_*ens 8 android seekbar android-fragments

Seekbar在片段中使用a 并需要移动Seekbar到不同的位置.但是,setProgress(xxx)不起作用.

你如何编程方式触发此方法为Seekbar:public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)?移动Seekbar手动工作正常.

Xar*_*mer 14

这是ProgressBar中的一个Bug!

如果再次传递相同的值,setProgress(...)似乎不会触发更新drawable.但它也不会在setMax期间触发.因此缺少更新.

为了解决这个问题,我只是bar.setProgress(0)在每次更新之前做一次...这只是一种解决方法,但它对我有用,如预期:

bar.setProgress(0); // call these two methods before setting progress.
bar.setMax(20);
bar.setProgress(20);
Run Code Online (Sandbox Code Playgroud)

第二选择.

mSeekBar.post(new Runnable() {
        @Override
        public void run() {
            mSeekBar.setProgress(percentOfFullVolume);
        }
    });
Run Code Online (Sandbox Code Playgroud)

它也可能适用于某人.

尝试先设置最大值,然后设置进度.

  • 第二个为我工作.我很惊讶它是2018年,这个错误仍然存​​在. (3认同)

RaB*_*RaB 1

SeekBar.setProgress()应该可以正常工作。您确定您的代码正在 UI 线程上执行吗?如果不是,那么这将是显而易见的解释。检查 API 文档中 ProgressBar 的示例

https://developer.android.com/reference/android/widget/ProgressBar.html

他们展示了如何将执行带回主线程。