Mam ToggleButton które stworzyły jak:Jak mogę uzyskać dynamiczny tekst ToggleButton w Androidzie?
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());
}
}
});
i okno wygląda następująco:
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();
Chodzi o to: jeśli ToggleButton jest włączona, to pojawia się jedno- okno dialogowe wyboru widoku listy, które jest listą tagów. Po wybraniu znacznika staje się nowym tekstem dla ToggleButton. Jeśli ToggleButton jest wyłączony (unChecked), tekst powraca do statycznego TextOff.
Problem polega na tym, że przycisk nie jest przerysowywany, gdy okno dialogowe zniknie. Wyświetlany tekst jest wciąż poprzednią wartością textOn.
Jak mogę wymusić przerysowanie? Próbowałem filterButton.postInvalidate();
, ale to nie pomogło.
+1 to działa. Powinieneś zaakceptować swoją odpowiedź: – ohhorob
Awesome! Dzięki! :) – zleao
Masz absolutną rację, że syncTextState nie jest wywoływany. Możesz jednak wywołać setText (tagNames [który]) bezpośrednio, aby zmienić tekst. – Dandalf