web-dev-qa-db-fra.com

Android SeekBar définir la valeur de progression

Je veux que la progression de SeekBar change chaque fois que je clique sur un bouton. Utiliser setProgress() ne fonctionne que pour la valeur initiale. Cela génère une erreur si je l'utilise après quelques modifications.

15
shiva

Peut-être devriez-vous essayer d'utiliser un gestionnaire? J'utilise cela dans une de mes applications et fonctionne bien.

1) Lors de la création de votre 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) Lorsque votre bouton est cliqué

// ...
seekBarHandler.post(new Runnable() {
    @Override
    public void run() {
        if (seekBar != null) {
            seekBar.setMax(0);
            seekBar.setMax(max);
            seekBar.setProgress(newProgress);
        }
    }
});
// ...
26
PFROLIM

Vous pouvez aussi utiliser :

mSeekBar.refreshDrawableState();

après avoir défini les progrès.

4
Jesus Dimrix

Vous devez appeler setOnSeekbarChangeListener() sur votre objet seekbar et laisser, par exemple, votre activité implémenter OnSeekbarChangeListener(). Cette fonction vous permet de faire ce que vous voulez.

1
similuke

La solution qui fonctionne pour moi:

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

Il supprime le clignotement du pouce

1
Mahmoud Shahoud

Essaye ça : 

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

au lieu de :

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

Si vous définissez d'abord la valeur maximale au maximum, la barre SeekBar peut avoir une idée des progrès réellement accomplis lorsque vous définissez progressValue. 

Cela a fait une différence pour moi lorsque je voulais une valeur par défaut pour ma barre de progression 

1
shellym

De toute façon, en tant que bibliothèque de support 28.0.0, je peux définir les progrès simplement comme ceci

mySeekBar.setProgress(17);

et la position est mise à jour sans problème.

0
Suragch