Je m'interroge sur le comportement de la Android SeekBars OnSeekBarChangeListener. En particulier, la méthode onProgressChanged-est notifiée uniquement pour la première et la dernière touche sur la barre de recherche?
J'essaie de rafraîchir un TextView qui devrait montrer la progression actuelle de la SeekBar. Mais TextView est juste mis à jour au premier contact et au dernier contact. Le débogage confirme mon hypothèse selon laquelle cette méthode n'est appelée que deux fois :( Ce que j'aimerais avoir, c'est que le TextView montre chaque changement de progression dans le SeekBar.
En bref: je recherche une possibilité d'obtenir un écouteur de progression qui soit appelé pour chaque petit changement de progression.
J'espère que cela t'aidera:
final TextView t1=new TextView(this);
t1.setText("Hello Android");
final SeekBar sk=(SeekBar) findViewById(R.id.seekBar1);
sk.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {
// TODO Auto-generated method stub
t1.setTextSize(progress);
Toast.makeText(getApplicationContext(), String.valueOf(progress),Toast.LENGTH_LONG).show();
}
});
onProgressChanged () doit être appelé à chaque changement de progression, pas seulement au premier et au dernier toucher (c'est pourquoi vous avez les méthodes onStartTrackingTouch () et onStopTrackingTouch ()).
Assurez-vous que votre SeekBar a plus de 1 valeur, c'est-à-dire votre MAX> = 3.
Dans votre onCreate:
yourSeekBar=(SeekBar) findViewById(R.id.yourSeekBar);
yourSeekBar.setOnSeekBarChangeListener(new yourListener());
Votre auditeur:
private class yourListener implements SeekBar.OnSeekBarChangeListener {
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// Log the progress
Log.d("DEBUG", "Progress is: "+progress);
//set textView's text
yourTextView.setText(""+progress);
}
public void onStartTrackingTouch(SeekBar seekBar) {}
public void onStopTrackingTouch(SeekBar seekBar) {}
}
Veuillez partager du code et les résultats du journal pour plus d'aide.
onProgressChanged est appelé chaque fois que vous déplacez le curseur.
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
textView.setText(String.valueOf(new Integer(progress)));
}
donc textView devrait montrer la progression et toujours changer si la barre de recherche est déplacée.
Remplacer toutes les méthodes
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
}
@Override
public void onStopTrackingTouch(SeekBar arg0) {
}
Toutes les réponses sont correctes, mais vous devez d'abord convertir un gros gros chiffre en minuteur:
public String toTimer(long milliseconds){
String finalTimerString = "";
String secondsString;
// Convert total duration into time
int hours = (int)( milliseconds / (1000*60*60));
int minutes = (int)(milliseconds % (1000*60*60)) / (1000*60);
int seconds = (int) ((milliseconds % (1000*60*60)) % (1000*60) / 1000);
// Add hours if there
if(hours > 0){
finalTimerString = hours + ":";
}
// Prepending 0 to seconds if it is one digit
if(seconds < 10){
secondsString = "0" + seconds;
}else{
secondsString = "" + seconds;}
finalTimerString = finalTimerString + minutes + ":" + secondsString;
// return timer string
return finalTimerString;
}
Et voici comment vous l'utilisez:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
textView.setText(String.format("%s", toTimer(progress)));
}