2015-01-17 28 views
5

Mam metodę tak:Android toggleButton.setOnText i .invalidate nie odświeża tekst

ToggleButton toggle = ((ToggleButton)findViewById(R.id.toggle)); 
toggle.setTextOn("blah"); 
toggle.setTextOff("blahblah"); 
toggle.invalidate(); // doesn't work? 

Metoda ta jest wywoływana z onOptionsItemSelected. Przycisk przełączania znajduje się wewnątrz LinearLayout, który znajduje się w innym LinearLayout.

Spodziewam się, że tekst zostanie zaktualizowany natychmiast po wywołaniu metody. Zamiast tego tekst na przełączniku aktualizuje się tylko po ręcznym naciśnięciu, aby zmienić stany. Czego tu mi brakuje, czy używam niewłaściwej metody? Dlaczego nie działa .invalidate?

Odpowiedz

10

Zamiast unieważniania, można zaktualizować przycisk tak:

toggle.setChecked(toggle.isChecked()); 

Aktualizacja:

To dziwne, że setTextOff i setTextOn nie aktualizują przycisk. Jednak robi to setText. Po prostu ustaw tekst dla poszczególnych stanów przycisków i zmień bieżącą wartość:

// Text based on state 
ToggleButton toggle = ((ToggleButton)findViewById(R.id.toggle)); 
toggle.setTextOn("blah"); 
toggle.setTextOff("blahblah"); 

CharSequence text = toggle.isChecked() ? toggle.getTextOn() : toggle.getTextOff(); 
toggle.setText(text); 
+0

To działa, ale dlaczego? I czy to naprawdę najlepszy sposób na zrobienie tego? – ZirconCode

+1

@ZirconCode został zaktualizowany za pomocą innego rozwiązania. – Simas

+3

rozwiązania czują się bardzo hacky, ale działają. Dzięki! – ZirconCode