Android编程 - 使用警报对话框以编程方式更改按钮文本

时间:2015-07-22 02:48:18

标签: java android button

我正在尝试创建一个用于编辑吉他标签的应用。我有一组代表音品的按钮,我希望能够点击按钮打开警告对话框,将该按钮的文本设置为输入的数字。

下面的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
}

2 个答案:

答案 0 :(得分:1)

您需要将setPositiveButton更改为:

@Override
public void onCreate() {
    super.onCreate();

    //Code from MyApplication.java

    mInstance = this;
    pref = new PrefManager(this);
}

并将Button更改为全局变量而不是本地变量。

这里的问题是当你调用editFret(View视图)时,它也会调用getFret()来显示对话框,然后调用button.setText(fret)而不等待用户按OK或取消所以你需要在调用OnClickListener时设置文本。

答案 1 :(得分:0)

用户在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
}

希望它有效或让我知道,干杯