Ho una ToggleButton che è impostato su come:Come posso ottenere un testo dinamico ToggleButton funzionante su 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());
}
}
});
e la finestra si presenta come:
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'idea è: se il ToggleButton è acceso, esso apre una singola finestra di dialogo lista di scelta scelta che è la lista di tag. Una volta che un tag viene scelto, diventa il nuovo textOn per ToggleButton. Se ToggleButton è disattivato (unChecked), il testo ritorna a TextOff statico.
Il problema è: il pulsante non viene ridisegnato quando la finestra di dialogo scompare. Il testo visualizzato è ancora il valore precedente di textOn.
Come posso forzare un ridisegno? Ho provato filterButton.postInvalidate();
ma quello non ha aiutato.
+1 funziona. Dovresti accettare la tua risposta – ohhorob
Fantastica! Grazie! :) – zleao
Hai sicuramente ragione sul fatto che syncTextState non venga chiamato. Ma puoi chiamare setText (tagNames [which]) direttamente per cambiare il testo. – Dandalf