J'ai un GridLayout
avec plusieurs boutons.Mettre à jour l'interface utilisateur sans geler
J'ai besoin de changer la couleur de chaque bouton dans une séquence, disons, toutes les 3 secondes.
J'ai un problème ici ... Jetez un oeil à mon code:
runnableScan = new Runnable() {
@Override
public void run() {
GridLayout view = Grid;
for (int i = 0; i < view.getChildCount(); i++) {
Button btn = (Button)view.getChildAt(i);
btn.setBackgroundColor(Color.RED);
handlerScan.postDelayed(this, 3000);
}
}
};
handlerScan.postDelayed(runnableScan, 3000);
Eh bien .. il ne change la couleur de tous les boutons au rouge, mais il les change à la fois !!! Je voulais qu'il change les couleurs dans une séquence, un bouton toutes les 3 secondes.
Si je mets un Toast
à l'intérieur, le Toast
sera déclenché toutes les trois secondes avec l'index de chaque bouton.
Qu'est-ce que je fais mal? Pourquoi tous les boutons sont-ils changés en rouge à la fois?
Etes-vous sûr que le 'Toast' est exécuté toutes les 3 secondes et vous n'êtes pas le voir jusqu'à ce que le précédent «Toast» soit rejeté? – codeMagic
Juger du code que vous avez posté, il est en fait en train de changer la couleur de tous les boutons à la fois. Essayez de remplacer toast avec Log.d et comparez le timing avec les entrées logcat à nouveau. Toast peut vous donner l'illusion d'un délai parce que le second toast n'apparaîtra pas jusqu'à ce que le premier toast soit effacé. – TactMayers
Bonjour codeMagic et TactMayers! Merci pour votre avis. En fait, Toast s'exécute toutes les trois secondes et affiche le texte (index) de chaque bouton. Étant donné que le texte Toast change, je suis sûr qu'il est déclenché toutes les trois secondes depuis qu'il a changé de texte. Des idées? –