Android 编程 - 使用警告对话框以编程方式更改按钮文本
Android Programming - Changing Button Text Programmatically with Alert Dialog
我正在尝试创建一个用于编辑吉他谱的应用程序。我有一组代表音品的按钮,我希望能够单击按钮打开一个警告对话框,将该按钮的文本设置为输入的数字。
下面的 editFret 函数由按钮通过其 onClick 属性 调用。当我 运行 这个时,我可以按下一个按钮,它会弹出对话框,我可以输入数字。在对话框中按 OK 后,按钮变为空白。当我再次单击该按钮或任何其他按钮时,该数字将显示为按钮中的文本。它还会不断将之后单击的任何按钮中的文本更改为最后一个输入值。
我尝试在单击时将按钮文本更改为常量值,但没有遇到任何问题,所以我假设问题出在 getFret 函数上,尽管我看不到它会是什么只是获取一个字符串。
//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
中的“确定” 时设置值。这是如何
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
确定时设置文本!
也许在您的方法中设置文本是多余的方法。您最好只使用此方法来调用 AlertDialog
public void editFret(View view){
//Button button = (Button) view;
getFret();
//button.setText(fret);
//button.invalidate(); //Don't know if this is necessary
}
希望它有用或让我知道,干杯
您需要将 setPositiveButton 更改为:
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
fret = input.getText().toString();
button.setText(fret);
}
})
并将 Button 更改为全局变量而不是局部变量。
这里的问题是,当您调用 editFret(View view) 时,它还会调用 getFret() 来显示对话框,然后调用 button.setText(fret) 而无需等待用户按下 OK 或取消所以调用OnClickListener时需要设置文本。
我正在尝试创建一个用于编辑吉他谱的应用程序。我有一组代表音品的按钮,我希望能够单击按钮打开一个警告对话框,将该按钮的文本设置为输入的数字。
下面的 editFret 函数由按钮通过其 onClick 属性 调用。当我 运行 这个时,我可以按下一个按钮,它会弹出对话框,我可以输入数字。在对话框中按 OK 后,按钮变为空白。当我再次单击该按钮或任何其他按钮时,该数字将显示为按钮中的文本。它还会不断将之后单击的任何按钮中的文本更改为最后一个输入值。
我尝试在单击时将按钮文本更改为常量值,但没有遇到任何问题,所以我假设问题出在 getFret 函数上,尽管我看不到它会是什么只是获取一个字符串。
//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
中的“确定” 时设置值。这是如何
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
确定时设置文本!
也许在您的方法中设置文本是多余的方法。您最好只使用此方法来调用 AlertDialog
public void editFret(View view){
//Button button = (Button) view;
getFret();
//button.setText(fret);
//button.invalidate(); //Don't know if this is necessary
}
希望它有用或让我知道,干杯
您需要将 setPositiveButton 更改为:
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
fret = input.getText().toString();
button.setText(fret);
}
})
并将 Button 更改为全局变量而不是局部变量。
这里的问题是,当您调用 editFret(View view) 时,它还会调用 getFret() 来显示对话框,然后调用 button.setText(fret) 而无需等待用户按下 OK 或取消所以调用OnClickListener时需要设置文本。