Android toggleButton.setOnText и .invalidate не обновляют текст

У меня есть такой метод:

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

Эти методы вызываются из onOptionsItemSelected. Кнопка переключения находится внутри LinearLayout, который находится внутри другого LinearLayout.

Я ожидаю, что текст обновится, как только будет вызван метод. Скорее текст на переключателе обновляется только после того, как я нажимаю его вручную для переключения состояний. Что мне здесь не хватает, я использую неправильный метод? Почему не работает .invalidate?


person ZirconCode    schedule 17.01.2015    source источник


Ответы (1)


Вместо аннулирования вы можете обновить кнопку следующим образом:

toggle.setChecked(toggle.isChecked());

Обновление:

Странно, что setTextOff и setTextOn не обновляют кнопку. Однако setText делает это. Так что просто установите текст для каждого состояния кнопки и setText для обновления текущего значения:

// 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);
person Simas    schedule 17.01.2015
comment
Это работает, но почему? И действительно ли это лучший способ сделать это? - person ZirconCode; 17.01.2015
comment
решения кажутся очень хакерскими, но они работают. Спасибо! - person ZirconCode; 17.01.2015
comment
помогите, ни один из них не работает для меня! текст установлен, но переключатель не обновляется!! - person jack_the_beast; 14.10.2015