Android SeekBar установить значение прогресса - PullRequest
17 голосов
/ 20 марта 2012

Я хочу, чтобы прогресс SeekBar менялся всякий раз, когда я нажимаю кнопку.Использование setProgress() работает только для начального значения.Выдает ошибку, если я использую ее после некоторых изменений.

Ответы [ 6 ]

26 голосов
/ 29 марта 2013

Возможно, вам следует попробовать использовать обработчик?Я использую это в моем приложении и отлично работает.

1) При создании 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) Когда нажата ваша кнопка

// ...
seekBarHandler.post(new Runnable() {
    @Override
    public void run() {
        if (seekBar != null) {
            seekBar.setMax(0);
            seekBar.setMax(max);
            seekBar.setProgress(newProgress);
        }
    }
});
// ...
4 голосов
/ 29 октября 2014

Вы также можете использовать:

mSeekBar.refreshDrawableState();

после установки прогресса.

3 голосов
/ 04 октября 2018

Попробуйте:

seekBar.setMax(50);
seekBar.setProgress(22);

вместо:

seekBar.setProgress(22); seekBar.setMax(50);

Только если вы сначала установите максимальное значение, SeekBar сможет понять, какбольшой прогресс действительно достигается, когда вы устанавливаете progressValue.

Это на самом деле имело значение для меня, когда я хотел значение по умолчанию для моего индикатора выполнения

1 голос
/ 04 июня 2016

Решение, которое работает для меня:

mSeekbaBar.setProgress(progress);
mSeekbaBar.post(new Runnable() {
            @Override
            public void run() {
                mSeekbaBar.setProgress(progress);
            }
        });

Удаляет моргание большого пальца

1 голос
/ 19 июня 2012

Вам нужно вызвать setOnSeekbarChangeListener() для вашего объекта панели поиска и позволить, например, вашему занятию реализовать OnSeekbarChangeListener(), и в этой функции вы можете делать все, что захотите.

0 голосов
/ 26 сентября 2018

Начиная с библиотеки поддержки 28.0.0, в любом случае, я могу установить прогресс просто так

mySeekBar.setProgress(17);

и позиция обновляется без проблем.

...