6

我有这样的方法:

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

此方法从onOptionsItemSelected. 切换按钮在 a 里面LinearLayout,它在另一个里面LinearLayout

我希望在调用该方法后立即更新文本。相反,仅在我手动按下切换状态后,切换按钮上的文本才会更新。我在这里缺少什么,我使用了错误的方法吗?为什么不起作用.invalidate

4

1 回答 1

12

您可以像这样更新按钮,而不是使其失效:

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);
于 2015-01-17T13:07:31.603 回答