6

我正在尝试将 onValueChangeListener 添加到我在 android 4.2.2 中的号码选择器 (np1) 中。

这是我到目前为止所拥有的

public class main extends Activity  {
ViewFlipper vf = null;
HttpClient client = null;
private ArrayList<String> captionList = new ArrayList<String>();
ListView lv = null;
private String custid = null;
ImageView iv = null;
private int vfloginview = 0;
private int vflistview = 0;
private boolean vfsentinal = false;
NumberPicker np1 = null;
TextView totalcost = null;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mystuffmobile);
    vf = (ViewFlipper) findViewById(R.id.vf);
    client = new DefaultHttpClient();
    lv = (ListView) findViewById(R.id.lv);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    np1 = (NumberPicker) findViewById(R.id.np1);
    np1.setMinValue(1);
    np1.setMaxValue(400);
    //np1.setOnValueChangedListener;    
    //np1.setOnValueChangedListener(onValueChange);

}

尝试测试它的功能我一直在使用这个

public void onValueChange (NumberPicker np1, int oldVal, int newVal) {
    Log.v("NumberPicker", np1.getValue() +"");
}

有谁知道一种简单的方法来实现这个监听器,而无需我的主要活动实现 NumberPicker.OnValueChangeListener?

注意:我反对让我的主要活动实现 NumberPicker.OnValueChangeListener 的唯一原因是因为我必须将 main 设置为 abstract 并且我的应用程序将无法运行。

4

1 回答 1

12

您将像按钮上的单击侦听器一样执行此操作。

np1.setOnValueChangedListener(new OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        // do something here
    }
});

一个完整的工作示例可以在这里找到:http ://samplecodez.com/android/numberpicker.php

一些风格点...

  • Main 应该大写,最好让它像 MainActivity 那样更具描述性。
  • 仅在必要时使用字段。我猜您并没有在 onCreate() 之外使用大多数这些变量,因此请改为使用局部变量。
  • TextView totalCost 是您最好的命名变量 :) 考虑使用详细名称。当您在很长一段时间内第一次回顾这段代码时,您会在 6 个月后感谢自己。
  • 没有魔法值(或字符串)!为您的最小值和最大值创建一个常量,这些值应该是您的字段的私有静态最终 int。
  • 在 Eclipse 中,设置首选项中的 java 保存操作以在您保存时自动格式化所有代码行。

当然,这些都不会让你的代码运行得更好,但它肯定会更容易阅读。

于 2013-04-13T01:18:12.580 回答