如何在android下获得工作动态切换按钮文本?
我有一个切换按钮,设置如下:如何在android下获得工作动态切换按钮文本?,android,dynamic,togglebutton,Android,Dynamic,Togglebutton,我有一个切换按钮,设置如下: final ToggleButton filterButton = (ToggleButton) findViewById(R.id.filterTags); filterButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (filterButton.isChecked()
final ToggleButton filterButton = (ToggleButton) findViewById(R.id.filterTags);
filterButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (filterButton.isChecked()) {
// pop up the list of tags so the user can choose which to filter by
// once one is chosen, the spinner will be updated appropriately
showDialog(DIALOG_TAGS);
} else {
// going unpressed, set the the spinner list to everything
updateSpinner(db.itemNames());
}
}
});
对话框如下所示:
case DIALOG_TAGS:
final String[] tagNames = db.tagNamesInUse();
dialog = new AlertDialog.Builder(this)
.setItems(tagNames, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
updateSpinner(db.getItemNamesForTag(tagNames[which]));
final ToggleButton filterButton = (ToggleButton) findViewById(R.id.filterTags);
filterButton.setTextOn(tagNames[which]);
dialog.dismiss();
}
})
.setNegativeButton("Cancel", UITools.getDialogCancellingListener())
.create();
其思想是:如果打开ToggleButton,它会弹出一个单选列表视图对话框,即标记列表。选择标记后,它将成为ToggleButton的新文本。如果ToggleButton已关闭(未选中),则文本将恢复为静态文本关闭
问题是:一旦对话框消失,按钮就不会被重新绘制。显示的文本仍然是textOn的上一个值
我怎样才能强制重画?我尝试了
filterButton.postInvalidate()代码>但这没有帮助。解决了!明智地读取ToggleButton的源代码表明,虽然setTextOn()和setTextOff()不会导致调用(private)syncTextState来更新TextView位,但调用setChecked()会导致调用。因此,诀窍在于:
dialog = new AlertDialog.Builder(this)
.setItems(tagNames, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
updateSpinner(db.getItemNamesForTag(tagNames[which]));
final ToggleButton filterButton = (ToggleButton) findViewById(R.id.filterTags);
filterButton.setTextOn(tagNames[which]);
filterButton.setChecked(filterButton.isChecked());
dialog.dismiss();
}
})
效果相当不错。是的,开源 关于syncTextState没有被调用,您肯定是对的。但是,您可以直接调用setText(标记名[which])来更改文本。