2013-06-26 47 views
3

我在片段中使用Seekbar並需要將Seekbar移動到不同的位置。但是,setProgress(xxx)不起作用。使用SeekBar和setProgress不會改變seekBar位置

如何以編程方式觸發此方法的Seekbarpublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)?手動移動Seekbar可以正常工作。

回答

0

SeekBar.setProgress()應該工作得很好。你確定你的代碼在UI線程上執行嗎?如果沒有,那麼這將是明顯的解釋。檢查示例中的API文檔的進度

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

在那裏,他們展示如何把執行回主線程。

+0

感謝您的回覆。我沒有使用線程,所以我不確定它是否在UI線程上執行。我會研究它。 – sowens

1

我添加此答案,因爲這可以幫助未來某人。
就我而言,我還認爲setProgress工作不正常,但這是我的錯誤。

increaseIncomeSeekBar.setProgress(progress); 
increaseIncomeSeekBar.setMax(maxProgress); 

對於信息的進步和maxProgress等於2000和12000,但顯示的搜索欄的時候,好像進度在0,因此無法正常工作。
你必須意識到這一點,這是非常合理的,當你知道它:

  • 第一搜索欄最大= 100,當你設置一個進步
  • >最大然後發展=最大值。
  • 因此您需要在設置進度值之前設置最大值。
6

這是ProgressBar中的Bug!

如果再次傳遞相同的值,setProgress(...)似乎不會觸發drawable上的更新。但它在setMax期間也沒有觸發。所以缺少更新。

爲了解決這個問題,我只是在做每次更新前bar.setProgress(0) ......這僅僅是一個解決辦法,但預期它爲我工作:

bar.setProgress(0); // call these two methods before setting progress. 
bar.setMax(20); 
bar.setProgress(20); 

第二個選項。

mSeekBar.post(new Runnable() { 
     @Override 
     public void run() { 
      mSeekBar.setProgress(percentOfFullVolume); 
     } 
    }); 

它也可能適用於某人。

嘗試先設置最大值,然後設置進度。

+0

Husnain Iqbal你可以使用postDelayed方法的第二個方法,並將延遲時間作爲100,然後它將更快地工作。 – Nepster

+0

它不適用於我:( –

+0

我得到了解決方案:)通過在onProgressChanged()中調用seekBar.setProgress(progress)並在setOnSeekBarChangeListener中的onStopTrackingTouch()中調用其餘方法。謝謝 –

2

我爲這個主題添加了一條評論,因爲它發生在我身上,花了我幾小時才弄清楚問題出在哪裏。該錯誤仍然有效,並且setProgress()方法有時無法正常工作。

我有提交和替換片段和發送每個片段的束內部的搜索欄值的MainActivity。用戶更改Seekbar的值,並將其進度放入。然後,當用戶切換片段時,新的獲得SeekBar進度。

它可以很好地用這種方式傳輸,而且我的進度變量在第二個片段上總是有正確的值。當我使用setProgress(theProgressValueTransmitted)方法時出現問題。這個設置我的SeekBar只有在我第一次更換第一個片段時才進展。在那之後,它不會改變它的進展的價值仍然是正確的。

我用:

int seekBarProgress; 
Bundle bundle = this.getArguments(); 
    if (bundle != null) { 
     seekBarProgress = bundle.getInt("seekBarProgress"); 
    mySeekBar.post(new Runnable() { 
       @Override 
       public void run() { 
        eventListTimeSeekBar.setProgress(seekBarProgress); 

       } 
      }); 
    } 

這是我可以使這項工作的唯一途徑。希望它可以幫助有同樣問題的人。這篇文章已經超過4年了,我甚至都不知道這個bug是如何報道的,因爲它已經被報道了。