将侦听器添加到数字选择器窗口小部件

时间:2013-01-06 18:27:28

标签: android onclicklistener numberpicker

我正在努力将数字选择器集成到我的应用程序中。活动显示每个带有数字选择器的项目列表。用户可以使用数字选择器增加或减少数量。当他们这样做时,我想更新显示价格的TextView。

我在努力实现这一目标时遇到了困难。我做了一个简单的项目,并试图在用户点击小部件时尝试显示一个Toast消息,但无济于事。

我的猜测是,数字窗口小部件不会被视为按钮,因为点击监听器不起作用?我很感激有关添加监听器的任何建议。

以下是我的代码:

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();
        }
    });
}

3 个答案:

答案 0 :(得分:16)

要使用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();
    }
}

答案 1 :(得分:9)

对于较新的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();

    }
});

答案 2 :(得分:2)

您需要设置NumberPicker.setOnValueChangedListener以通知NumberPicker

当前值的更改

请参阅example我们如何为NumberPicker

设置setOnValueChangedListener