J'ai un ToggleButton qui est mis en place comme:Comment puis-je obtenir un texte dynamique ToggleButton sous android?
final ToggleButton filterButton = (ToggleButton) findViewById(R.id.filterTags);
filterButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (filterButton.isChecked()) {
// pop up the list of tags so the user can choose which to filter by
// once one is chosen, the spinner will be updated appropriately
showDialog(DIALOG_TAGS);
} else {
// going unpressed, set the the spinner list to everything
updateSpinner(db.itemNames());
}
}
});
et la boîte de dialogue ressemble à:
case DIALOG_TAGS:
final String[] tagNames = db.tagNamesInUse();
dialog = new AlertDialog.Builder(this)
.setItems(tagNames, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
updateSpinner(db.getItemNamesForTag(tagNames[which]));
final ToggleButton filterButton = (ToggleButton) findViewById(R.id.filterTags);
filterButton.setTextOn(tagNames[which]);
dialog.dismiss();
}
})
.setNegativeButton("Cancel", UITools.getDialogCancellingListener())
.create();
L'idée est: si le ToggleButton est activé, il apparaît un simple boîte de dialogue liste de choix qui est la liste des tags. Une fois qu'un tag est choisi, il devient le nouveau textOn pour le ToggleButton. Si le ToggleButton est désactivé (non vérifié), le texte revient au TextOff statique.
Le problème est le suivant: le bouton n'est pas redessiné une fois la boîte de dialogue disparue. Le texte affiché est toujours la valeur précédente de textOn.
Comment puis-je forcer un redessin? J'ai essayé filterButton.postInvalidate();
mais cela n'a pas aidé.
+1 cela fonctionne. Vous devriez accepter votre réponse – ohhorob
Awesome! Merci! :) – zleao
Vous avez certainement raison de ne pas être appelé syncTextState. Mais, vous pouvez appeler setText (tagNames [qui]) directement pour changer le texte. – Dandalf