Android toggleButton.setOnText 和 .invalidate 不刷新文本

标签 android view refresh invalidation android-togglebutton

我有这样的方法:

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

此方法从 onOptionsItemSelected 调用。切换按钮位于一个 LinearLayout 内,而该 LinearLayout 位于另一个 LinearLayout 内。

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

最佳答案

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

toggle.setChecked(toggle.isChecked());

更新:

奇怪的是 setTextOffsetTextOn 没有更新按钮。但是 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);

关于Android toggleButton.setOnText 和 .invalidate 不刷新文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27999623/

相关文章:

android - 如何授予对关联/辅助 Google 帐户的访问权限

android - RelativeLayout 宽度和高度 fill_parent 不起作用

mysql - 是否可以立即刷新 Google map ?

angular - 如何在 Angular 2 中使用分页重新加载页面?

Android:如何使 ListView 定期更新自身?

php - 从 Android 手机更新数据库失败

java - 在默认浏览器中打开 URL

C#/.net 相当于 android 处理程序

android - viewpager 上方的 Viewstub ()

sql-server - 而不是触发器来更新具有多个表的 View