10

ナンバーピッカーをアプリケーションに統合する作業を行っています。このアクティビティは、それぞれ番号ピッカーを使用してアイテムのリストを表示します。ユーザーは、ナンバーピッカーを使用して数量を増減できます。彼らがこれを行うと、価格を示す TextView を更新したいと思います。

これを達成しようとしたとき、私は困難に遭遇しました。簡単なプロジェクトを作成し、ユーザーがウィジェットをクリックしたときにトースト メッセージを表示しようとしましたが、役に立ちませんでした。

私の推測では、数値ウィジェットはボタンのように扱われないため、クリック リスナーは機能しませんか? リスナーの追加に関するアドバイスをいただければ幸いです。

以下は私のコードです:

NumberPicker np;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    np = (NumberPicker)findViewById(R.id.numberPicker1);
    np.setMaxValue(99);
    np.setMinValue(0);
    np.setValue(50);

    np.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(), "Number selected", Toast.LENGTH_SHORT).show();
        }
    });
}
4

3 に答える 3

22

でリスナーを設定するPickerには、アクティビティでピッカー インターフェース リスナーを実装する必要があります。(実際には、あなたのアクティビティはインターフェイスを実装するために必須ではありません。匿名の内部メソッドを使用することもできます。何でも機能します。)

あなたの活動では:

public class MainActivity extends Activity implements NumberPicker.OnValueChangeListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        NumberPicker np = (NumberPicker)findViewById(R.id.numberPicker1);
        np.setMaxValue(99);
        np.setMinValue(0);
        np.setValue(50);
        np.setOnValueChangedListener(this);

    }

    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        Toast.makeText(this, "change", Toast.LENGTH_SHORT).show();
    }
}
于 2013-01-06T18:40:36.980 に答える
10

新しい Android 開発者 (私のような) にとって、アクティビティ自体はリスナーを実装する必要はありません。に渡すだけsetOnValueChangedListener()です。

これにより、implementsオーバーラップが多すぎたり多すぎたりするのを防ぐことができます@Overrides

例:

// Number Picker
NumberPicker np = (NumberPicker) getView().findViewById(R.id.numberPicker1);
np.setMinValue(0);
np.setMaxValue(35);

np.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker numberPicker, int i, int i2) {

        Toast.makeText(this, "Value was: " + Integer.toString(i) + " is now: " + Integer.toString(i2), Toast.LENGTH_SHORT).show();

    }
});
于 2014-03-15T13:14:54.680 に答える
2

NumberPicker.setOnValueChangedListenerを設定して、現在の値の変更を通知する必要があります。NumberPicker

NumberPicker の 設定方法のこの例を参照してくださいsetOnValueChangedListener

于 2013-01-06T18:33:07.897 に答える