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器,您的活动必须实现选择器接口侦听器。(其实你的activity并不是强制实现接口的,你也可以使用匿名内部方法。随便什么都行。)

所以在你的活动中:

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

看这个例子 我们如何setOnValueChangedListener为 NumberPicker设置

于 2013-01-06T18:33:07.897 回答