0

在代码中,我有一个整数变量。在 GUI 中,我有一个数字 editText 字段和两个按钮,它们将变量的值增加/减少一。

我需要将该字段链接到变量,以便该字段在每次更改时显示变量的当前值(即按下按钮),并在用户使用 Android 键盘编辑字段时自动设置变量值。最好,我希望它自动更新变量而无需按“完成”(如果可能的话),但是我还需要设置数量限制。此外,每次更改值时都需要调用一个方法。

我已经能够找到如何根据请求从 editText 读取值(到变量),以及如何将特定文本设置到字段中(从变量)。但是,当我需要动态地将字段用作输入和输出时,这似乎不太实用。例如,当按下按钮时,它会更改变量,然后更改字段,但这也会触发 onTextChanged 观察程序,然后再次获取字段文本并将其设置为值。我假设必须有一种更有效的方法来做到这一点。

4

1 回答 1

0

没有必要发明轮子。Android 框架为此提供了小部件 - NumberPicker


编辑:如果你不能或不想使用NumberPicker,这里的想法是:

private class NumberPicker {
    private int value=0;

    private Button btnIncr;
    private Button btnDecr;
    private EditText editText;

    public NumberPicker(Button btnIncr, Button btnDecr, EditText editText) {
        this.btnIncr=btnIncr;
        this.btnDecr=btnDecr;
        this.editText=editText;

        this.btnIncr.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                value++;
                NumberPicker.this.editText.setText(String.valueOf(value));
            }
        });

        this.btnDecr.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                value--;
                NumberPicker.this.editText.setText(String.valueOf(value));
            }
        });

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                value=Integer.parseInt(s.toString());
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }

    public int getValue() {
        return value;
    }
}

并且不要担心当按钮更改值时会触发 TextWatcher。这不应该引起任何问题。

于 2013-01-18T00:03:35.137 回答