Android SeekBar set progress value

后端 未结 6 956
旧时难觅i
旧时难觅i 2020-12-06 16:22

I want the SeekBar progress to change whenever I click a button. Using setProgress() works only for initial value. It throws an error if I use it

相关标签:
6条回答
  • 2020-12-06 16:28

    Perhaps you should try to use a handler? I use this in an app of mine and works fine.

    1) When creating your 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) When your button is clicked

    // ...
    seekBarHandler.post(new Runnable() {
        @Override
        public void run() {
            if (seekBar != null) {
                seekBar.setMax(0);
                seekBar.setMax(max);
                seekBar.setProgress(newProgress);
            }
        }
    });
    // ...
    
    0 讨论(0)
  • 2020-12-06 16:33

    You can also use :

    mSeekBar.refreshDrawableState();
    

    after you set progress .

    0 讨论(0)
  • 2020-12-06 16:41

    The solution that works for me:

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

    It removes the blinking of the thumb

    0 讨论(0)
  • 2020-12-06 16:42

    You need to call setOnSeekbarChangeListener() on your seekbar object and let for example your activity implement OnSeekbarChangeListener() and in that function you can do whatever you want.

    0 讨论(0)
  • 2020-12-06 16:48

    As of support library 28.0.0 anyway, I can set the progress simply like this

    mySeekBar.setProgress(17);
    

    and the position gets updated without a problem.

    0 讨论(0)
  • 2020-12-06 16:50

    Try this :

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

    instead of :

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

    Only if you set the Max Value first, can the SeekBar get an idea of how much progress is actually made, when you set the progressValue.

    This actually made a difference for me when I wanted a default value for my Progress Bar

    0 讨论(0)
提交回复
热议问题