Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android toggleButton.setOnText and .invalidate doesn't refresh text

I have a method like this:

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

This methods gets called from onOptionsItemSelected. The toggle button is inside a LinearLayout which is inside another LinearLayout.

I'm expecting the text to update as soon as the method is called. Rather the text on the toggle only updates after I manually press it to switch states. What am I missing here, am I using the wrong method? Why doesn't .invalidate work?

like image 283
ZirconCode Avatar asked Jan 17 '15 12:01

ZirconCode


1 Answers

Instead of invalidating, you can update the button like this:

toggle.setChecked(toggle.isChecked());

Update:

It is weird that setTextOff and setTextOn don't update the button. However setText does that. So just set the text for each button states and setText to update current value:

// 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);
like image 121
Simas Avatar answered Oct 15 '22 23:10

Simas