web-dev-qa-db-ja.com

Android SeekBar set progress value

ボタンをクリックするたびにSeekBarの進行状況を変更したい。 setProgress()の使用は、初期値に対してのみ機能します。変更してから使用するとエラーがスローされます。

17
shiva

おそらく、ハンドラーを使用する必要がありますか?私は私のアプリでこれを使用し、うまく動作します。

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);
        }
    }
});
// ...
26
PFROLIM

以下も使用できます。

mSeekBar.refreshDrawableState();

進捗を設定した後。

4
Jesus Dimrix

これを試して :

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

の代わりに :

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

最大値を最初に設定した場合にのみ、seekBarは、progressValueを設定したときに実際にどの程度の進捗があったかを知ることができます。

進行状況バーのデフォルト値

3
shellym

シークバーオブジェクトでsetOnSeekbarChangeListener()を呼び出し、たとえばアクティビティでOnSeekbarChangeListener()を実装する必要があります。その関数では、何でも好きなことができます。

1
similuke

私のために働く解決策:

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

親指の点滅を取り除きます

1
Mahmoud Shahoud

とにかくサポートライブラリ28.0.0の時点では、このように進捗を設定できます。

mySeekBar.setProgress(17);

そして、問題なく位置が更新されます。

0
Suragch