尝试从XML中按下onClick()后更改按钮上的文本。 但是文本在方法运行后不会更新,只有在我再次单击按钮后才会更新到新文本。我尝试使用runOnUiThread()运行它,但它的行为相同。谁知道为什么?
代码:
public void setLabel(View v) {
v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
final EditText input = new EditText(this);
new AlertDialog.Builder(this)
.setMessage("Add label:")
.setView(input)
.setPositiveButton("Set", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
if (input.getText() == null || input.getText().toString().length() == 0) {
Toast.makeText(AlarmDialog.this, Html.fromHtml("<i>" + getString(R.string.label_reset) + "<i>"), Toast.LENGTH_SHORT).show();
labelSet = false;
}
else {
alarmLabel = input.getText().toString();
labelSet = true;
Toast.makeText(AlarmDialog.this, Html.fromHtml("<b>" + getString(R.string.label_set) + "<b>"), Toast.LENGTH_SHORT).show();
}
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Toast.makeText(AlarmDialog.this, Html.fromHtml("<i>" + getString(R.string.label_not_set) + "<i>"), Toast.LENGTH_SHORT).show();
}
}).create().show();
Button button = (Button) v;
if (labelSet)
button.setText(R.string.label_set);
else
button.setText(R.string.label);
}
XML:
<Button
android:id="@+id/label_button"
android:layout_height="fill_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:text="@string/label"
android:onClick="setLabel"
style="@android:style/Widget.Holo.Button.Borderless"
android:padding="8dp"/>
答案 0 :(得分:2)
我认为问题在于你的
Button button = (Button) v;
if (labelSet)
button.setText(R.string.label_set);
else
button.setText(R.string.label);
代码在AlertDialog中输入或单击某些内容之前执行。因为代码就在你说AlertDialog.show()的那一行的正下方。因此,如果您希望之后执行代码,则必须将其添加到onClickListener中。第二次它只能工作,因为在再次点击按钮之前关闭了alertview。你的labelSet变量已经设置好了。
答案 1 :(得分:0)
如果labelSet
最初设置为false
,那么您第一次点击该按钮时就会...
button.setText(R.string.label);
...将被调用,它不会更新按钮中的文本。
请注意,在 onClick
方法运行完成后,您的AlertDialog setLabel
方法将被称为(具体来说,点击肯定时会调用它) AlertDialog
中的按钮。我相信你所寻找的更像是......
public void setLabel(View v) {
v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
final Button button = (Button) v;
final EditText input = new EditText(this);
new AlertDialog.Builder(this)
.setMessage("Add label:")
.setView(input)
.setPositiveButton("Set", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
if (input.getText() == null || input.getText().toString().length() == 0) {
Toast.makeText(AlarmDialog.this, Html.fromHtml("<i>" + getString(R.string.label_reset) + "<i>"), Toast.LENGTH_SHORT).show();
button.setText(R.string.label);
}
else {
alarmLabel = input.getText().toString();
Toast.makeText(AlarmDialog.this, Html.fromHtml("<b>" + getString(R.string.label_set) + "<b>"), Toast.LENGTH_SHORT).show();
button.setText(R.string.label_set);
}
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Toast.makeText(AlarmDialog.this, Html.fromHtml("<i>" + getString(R.string.label_not_set) + "<i>"), Toast.LENGTH_SHORT).show();
}
}).create().show();
}