2011-09-15 39 views
4

我正在使用股票SeekBar組件來瀏覽一組ViewManager,它工作得很好。唯一的問題是,當數據發生變化時,我必須通過setMax(int值)動態更改SeekBar的最大值。當我這樣做時,SeekBar不會得到更新,直到我導航到一個新的頁面。我在的地方,我這樣做是一個哈克修復,強制onProgressChanged:Android SeekBar在用setMax動態設置最大值後不會刷新

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

有沒有更好的方式來做到這一點?

回答

7

問題現在有幾個月了,但我會回答,因爲尋找這個問題給我帶來了這裏。

答案實際上是Android中的一個錯誤。它似乎是固定在我的3.2.1平​​板電腦上,但該錯誤出現在我的2.3.6手機上。該錯誤位於SeekBar類的父級ProgressBar小部件中。您將解決方案設置爲虛假價值,並返回到目前爲止我所能找到的解決方案。

你會發現這個錯誤在這裏更詳細的信息: android progressBar does not update progress view/drawable

10

創建updateThumb();方法在VerticalSeekbar中

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

然後在設置進度後調用更新縮略圖方法。

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

它爲我verticalseekbar CALSS工作

+1

是的,這可以在verticalSeekBar中使用。 –

+0

工作for holoeverywhere seekbar與Android 5.1.1 - 但方法'onProgressChanged'不再工作... – deadfish

+1

+一,仍然是一個bug在lolipop,這種解決方法幫助。 – GoodSp33d

0

是的,我可以證實@ saravanan的解決方案與VerticalSeekBar的偉大工程,但還有另一種方式(最好恕我直言)來解決這個問題,即@TechnIx的答案發現here

基本的解決方案是在VerticalSeekBar類使用此功能:

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

希望它能幫助!

2

@saravanan答案是正確的。但應該這樣做。

通過在VerticalSeekbar類中重寫setProgress來解決該問題。

@Override 
    public synchronized void setProgress(int progress) 
    { 
     super.setProgress(progress); 
     onSizeChanged(getWidth(), getHeight(), 0, 0); 
    }