问题
I want the SeekBar
progress to change whenever I click a button. Using setProgress()
works only for initial value. It throws an error if I use it after some changes.
回答1:
Perhaps you should try to use a handler? I use this in an app of mine and works fine.
1) When creating your SeekBar:
// ...
seekBarHandler = new Handler(); // must be created in the same thread that created the SeekBar
seekBar = (SeekBar) findViewById(R.id.my_seekbar);
// you should define max in xml, but if you need to do this by code, you must set max as 0 and then your desired value. this is because a bug in SeekBar (issue 12945) (don't really checked if it was corrected)
seekBar.setMax(0);
seekBar.setMax(max);
seekBar.setProgress(progress);
// ...
2) When your button is clicked
// ...
seekBarHandler.post(new Runnable() {
@Override
public void run() {
if (seekBar != null) {
seekBar.setMax(0);
seekBar.setMax(max);
seekBar.setProgress(newProgress);
}
}
});
// ...
回答2:
You can also use :
mSeekBar.refreshDrawableState();
after you set progress .
回答3:
Try this :
seekBar.setMax(50);
seekBar.setProgress(22);
instead of :
seekBar.setProgress(22);
seekBar.setMax(50);
Only if you set the Max Value first, can the SeekBar get an idea of how much progress is actually made, when you set the progressValue.
This actually made a difference for me when I wanted a default value for my Progress Bar
回答4:
You need to call setOnSeekbarChangeListener()
on your seekbar object and let for example your activity implement OnSeekbarChangeListener()
and in that function you can do whatever you want.
回答5:
The solution that works for me:
mSeekbaBar.setProgress(progress);
mSeekbaBar.post(new Runnable() {
@Override
public void run() {
mSeekbaBar.setProgress(progress);
}
});
It removes the blinking of the thumb
回答6:
As of support library 28.0.0 anyway, I can set the progress simply like this
mySeekBar.setProgress(17);
and the position gets updated without a problem.
来源:https://stackoverflow.com/questions/9792888/android-seekbar-set-progress-value