Question de noob sur son chemin. Dans le code ci-dessous je mets à jour le texte d'un bouton sous Android. Ensuite, je veux attendre deux secondes, puis mettre à jour le texte à nouveau. Si je commente le second b.setText ("Envoyer les données"), celui après le sommeil - alors b.setText ("Success") est écrit sur le bouton. Si je ne commente pas celui-ci, je ne verrai jamais le texte "Success" sur le bouton, seulement "Send data". C'est comme si Thread.sleep() est ignoré quand j'ai le second b.setText ("Send data"). Google a suggéré d'ajouter une minuterie après setText ("Success") afin que le code setText() ait le temps d'être exécuté avant le sommeil. N'a pas aidé.button.setText() et Thread.sleep()
final Button b = (Button) findViewById(R.id.button);
b.setText("Send data");
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
b.setClickable(false);
b.setText("Success");
System.out.println("Debug before");
try
{
Thread.sleep(2000);
}
catch (Exception e)
{
}
System.out.println("Debug after");
b.setText("Send data");
b.setClickable(true);
}
});
Vous bloquez votre boucle de rendu. –
Vous devez générer un nouveau thread qui effectuera la mise à jour. Ainsi, au lieu d'attendre dans le thread principal, générer un nouveau thread qui contient votre thread.sleep() et la mise à jour. –
Merci! J'ai essayé une version de cela mais ensuite j'ai eu l'erreur que les mises à jour seulement peuvent être faites par le fil qui a créé le bouton, et c'est le fil principal. – BjornW