0

コードには、整数変数があります。GUI には、数値の editText フィールドと、変数の値を 1 ずつ増減する 2 つのボタンがあります。

フィールドを変数にリンクして、変数が変更される (つまり、ボタンが押される) たびに変数の現在の値が表示されるようにし、ユーザーが 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 に答える