Android SeekBar не обновляется после динамической установки максимального значения с помощью setMax - PullRequest
5 голосов
/ 16 сентября 2011

Я использую стандартный компонент SeekBar для навигации по набору ViewPager, и он работает довольно хорошо.Единственная проблема заключается в том, что при изменении данных я должен динамически изменять максимальное значение SeekBar через setMax (int value).Когда я это делаю, SeekBar не обновляется, пока я не перехожу на новую страницу.У меня есть хакерское исправление, где я делаю это, чтобы вызвать onProgressChanged:

seekBarVP.setProgress(focusedPage+1);
seekBarVP.setProgress(focusedPage-1);
seekBarVP.setProgress(focusedPage);

Есть ли лучший способ сделать это?

Ответы [ 4 ]

12 голосов
/ 21 ноября 2013

Создать updateThumb (); метод в VerticalSeekbar

public void updateThumb(){
     onSizeChanged(getWidth(), getHeight(), 0, 0);
}

И затем вызвать метод обновления большого пальца после установки прогресса.

seekBar.setProgress((int) progress);
seekBar.updateThumb();

его работа для меня в вертикальной строке calss

7 голосов
/ 12 декабря 2011

Вопросу уже несколько месяцев, но я все равно отвечу, потому что поиск этой проблемы привел меня сюда.

Ответ: в Android есть ошибка. Кажется, это исправлено на моем планшете 3.2.1, но ошибка присутствует на моем телефоне 2.3.6. Ошибка в виджете ProgressBar, который является родителем класса SeekBar. Ваше решение для установки прогресса на фиктивное значение и обратно - пока что обходной путь easyies, который я смог найти.

Более подробную информацию об этой ошибке вы найдете здесь: Android ProgressBar не обновляет прогресс выполнения / рисовать

3 голосов
/ 04 мая 2015

@ saravanan Ответ правильный.Но это должно быть сделано следующим образом.

Решена проблема путем переопределения setProgress в классе VerticalSeekbar.

 @Override
    public synchronized void setProgress(int progress) 
    { 
        super.setProgress(progress); 
        onSizeChanged(getWidth(), getHeight(), 0, 0); 
    }
0 голосов
/ 13 апреля 2015

да, я могу подтвердить, что решение @ saravanan отлично работает с VerticalSeekBar, но есть другой способ (лучше imho), чтобы решить его, то есть найденный ответ @TechnIx здесь .

Базовое решение использует эту функцию в вашем классе VerticalSeekBar:

public synchronized void setProgressAndThumb(int progress) {
    setProgress(getMax() - (getMax()- progress));
    onSizeChanged(getWidth(), getHeight() , 0, 0); }

Надеюсь, это поможет!

...