Java Android编程-通过警报对话框以编程方式更改按钮文本
我正在尝试创建一个用于编辑吉他标签的应用程序。我有一个代表FRET的按钮数组,我希望能够单击该按钮打开一个警报对话框,将该按钮的文本设置为输入的数字 按钮通过其onClick属性调用下面的editFret函数。当我运行这个程序时,我可以按下一个按钮,它会弹出对话框,我可以很好地输入数字。但在对话框中按OK后,按钮变为空白。当我再次单击按钮或任何其他按钮时,该数字将显示为按钮中的文本。它还不断地将随后单击的任何按钮中的文本更改为最后的输入值 我尝试在单击时将按钮文本更改为常量值,但没有任何问题,因此我假设问题出在getFret函数上,尽管我不可能看到它会是什么,因为它只是获取一个字符串Java Android编程-通过警报对话框以编程方式更改按钮文本,java,android,button,Java,Android,Button,我正在尝试创建一个用于编辑吉他标签的应用程序。我有一个代表FRET的按钮数组,我希望能够单击该按钮打开一个警报对话框,将该按钮的文本设置为输入的数字 按钮通过其onClick属性调用下面的editFret函数。当我运行这个程序时,我可以按下一个按钮,它会弹出对话框,我可以很好地输入数字。但在对话框中按OK后,按钮变为空白。当我再次单击按钮或任何其他按钮时,该数字将显示为按钮中的文本。它还不断地将随后单击的任何按钮中的文本更改为最后的输入值 我尝试在单击时将按钮文本更改为常量值,但没有任何问题,因
//Create string to store the fret number
String fret;
public void getFret(){
//Create text input field
final EditText input = new EditText(this);
input.setInputType(InputType.TYPE_CLASS_NUMBER);
input.setFilters(new InputFilter[] {new InputFilter.LengthFilter(2)});
new AlertDialog.Builder(this)
.setTitle("Edit fret")
.setMessage("Input fret number")
.setView(input)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
fret = input.getText().toString();
}
})
.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Do nothing
}
}).show();
}
public void editFret(View view){
Button button = (Button) view;
getFret();
button.setText(fret);
button.invalidate(); //Don't know if this is necessary
}
当用户在
AlertDialog
中单击OK时,应设置值。这是怎么回事
new AlertDialog.Builder(this)
.setTitle("Edit fret")
.setMessage("Input fret number")
.setView(input)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
fret = input.getText().toString();
//TODO: HERE SET THE BUTTON VIEW AND TEXT TO IT
Button button = (Button) findViewById(R.id.button); // This line
button.setText(fret); // And this line
}
})
.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Do nothing
}
}).show();
当单击“确定”时,它将设置文本
也许在方法中设置文本是多余的方法。您最好使用此方法来调用AlertDialog
public void editFret(View view){
//Button button = (Button) view;
getFret();
//button.setText(fret);
//button.invalidate(); //Don't know if this is necessary
}
希望它起作用或让我知道,干杯您需要将设置正按钮更改为:
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
fret = input.getText().toString();
button.setText(fret);
}
})
并将按钮更改为全局变量,而不是局部变量
这里的问题是,当您调用editFret(视图)时,它还将调用getFret(),显示对话框,然后调用button.setText(fret),而不等待用户按OK或Cancel,因此您需要在调用OnClickListener时设置文本。其他人已经给出了正确的答案,但我还想补充一点,您应该使用.setNegativeButton(“Cancel”,null),而不是将onclick侦听器设置为不执行任何操作。更简单、更高效。
将按钮更改为全局变量而不是局部变量
是一种不好的方法,因为您必须在活动中只使用一次对象,并且不必在整个活动的生命周期中保留其价值。我同意您的看法,但由于它是一个按钮,我想他也会希望添加onClickListener和其他事情但这只是我自己的假设,就是这样。谢谢你的解释。我只需要按钮是本地的,所以我将它移动到getFret函数中,并将其设置为onClick函数,并且能够完全删除editFret函数。