【问题标题】:how to get different Number picker number and to be total up如何获得不同的号码选择器号码并总计
【发布时间】:2016-03-04 22:07:34
【问题描述】:

我已经创建了 3 个数字选择器,计划在选择时添加/总计这些数字选择器,但现在我面临一些字符串数组问题

输入:这里我从数字选择器 20、30、10 中选择的数字

输出:103020

但我需要它总计为 10+20+30=60,而不是像 103020 那样显示输出

   NumberPicker.OnValueChangeListener onValueChanged = new NumberPicker.OnValueChangeListener() {
            @Override
            public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
                NumberPicker[] nps = new NumberPicker[3];
                nps[0] = (NumberPicker) findViewById(R.id.carbPercentage);
                nps[1] = (NumberPicker) findViewById(R.id.proteinPercentage);
                nps[2] = (NumberPicker) findViewById(R.id.fatPercentage);

                String temp = "";
                for (int i = 0; i < 3; i++) {
                    String[] values = nps[i].getDisplayedValues();
                    temp = values[nps[i].getValue()] + temp;
                }

                TextView tv = (TextView) findViewById(R.id.totalPercentage);
                tv.setText(temp);
            }
        };

        NumberPicker[] nps = new NumberPicker[3];
        nps[0] = (NumberPicker) findViewById(R.id.carbPercentage);
        nps[1] = (NumberPicker) findViewById(R.id.proteinPercentage);
        nps[2] = (NumberPicker) findViewById(R.id.fatPercentage);

        String[] values = new String[21];
        for (int i = 0; i < values.length; i++) {
            values[i] = Integer.toString(i * 5);
        }

        for (int i = 0; i < 3; i++) {
            nps[i].setMaxValue(values.length - 1);
            nps[i].setMinValue(0);
            nps[i].setDisplayedValues(values);
            nps[i].setOnValueChangedListener(onValueChanged);
        }

【问题讨论】:

    标签: android android-number-picker


    【解决方案1】:

    我不明白你为什么试图通过 'temp' 变量的字符串连接来连接 NumberPicker 值。而是使用这个:

    在数字选择器的 onValueChange 事件处理程序中,

    long totalSum = 0L;
    
    for(int i=0; i<3; i++)
          totalSum + = nps[i].getValue(); // getValue() method returns int
    
    TextView tv = (TextView) findViewById(R.id.totalPercentage);
    tv.setText(String.valueOf(totalSum));
    

    如果这有帮助,请告诉我。

    【讨论】:

    • 感谢您的回答@oathkeeper,但它添加了我滚动的数字的步骤,例如:当第一个数字选择器 scoll 2 次显示 2 时,第二个数字 scoll 3 次显示 2+3 = 5 time , tht i scoll 但我需要的是数字选择器中要加起来的值,例如:第一个 np i scoll 到 4,第二个到 1 和第三个到 5,它将显示 4+1+5=10,里面的值不是一步怎么办?
    【解决方案2】:

    请看下面@oathkeeper 的答案是真的。 让我来描述一件最好的事情。

    "+" 它以不同的方式工作。

    (String + string) always return string concate.
    (String + int/long) always return string concate.
    (int/long + string) always return string concate.
    (int/long + int/long) always return int/long (Mathamatical opration).
    

    简单和基本的 JAVA 概念。

    【讨论】:

      【解决方案3】:

      您只需将nps[i].getDisplayedValues() 更改为nps[i].getValue(),这将返回一个int 值。然后将这些int 值加在一起,然后显示出来。

         NumberPicker.OnValueChangeListener onValueChanged = new NumberPicker.OnValueChangeListener() {
                  @Override
                  public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
                      NumberPicker[] nps = new NumberPicker[3];
                      nps[0] = (NumberPicker) findViewById(R.id.carbPercentage);
                      nps[1] = (NumberPicker) findViewById(R.id.proteinPercentage);
                      nps[2] = (NumberPicker) findViewById(R.id.fatPercentage);
      
                      // change here!
                      int sum = 0;
                      // String temp = "";
                      for (int i = 0; i < 3; i++) {
                          String[] values = nps[i].getDisplayedValues();
                          sum += Integer.parseInt(values[nps[i].getValue()]);
                          // temp = values[nps[i].getValue()] + temp;
                      }
      
                      TextView tv = (TextView) findViewById(R.id.totalPercentage);
                      tv.setText(String.valueOf(sum));
                  }
              };
      
              NumberPicker[] nps = new NumberPicker[3];
              nps[0] = (NumberPicker) findViewById(R.id.carbPercentage);
              nps[1] = (NumberPicker) findViewById(R.id.proteinPercentage);
              nps[2] = (NumberPicker) findViewById(R.id.fatPercentage);
      
              String[] values = new String[21];
              for (int i = 0; i < values.length; i++) {
                  values[i] = Integer.toString(i * 5);
              }
      
              for (int i = 0; i < 3; i++) {
                  nps[i].setMaxValue(values.length - 1);
                  nps[i].setMinValue(0);
                  nps[i].setDisplayedValues(values);
                  nps[i].setOnValueChangedListener(onValueChanged);
              }

      【讨论】:

      • 感谢您的回答韦斯利,但它添加了我滚动前的数字的步骤:当第一个数字选择器 scoll 2 次显示 2 时,第二个数字 scoll 3 次显示 2+3= 5 次我总 scoll 但我需要的是数字选择器内的值要加起来例如:第一个 np i scoll 到 4,第二到 1 和第三到 5,它将显示 4+1+5=10,是里面的值不是一步怎么办?
      • @WgSam 我做了一些更改,请重试
      • 感谢 Wesley 解决问题!昨晚我的代码和你给我看的一样,但是当我 scoll 时我一直跳出来,因为我忘记把这个 String.valueOf(sum) 放在我的 setText 中,但感谢你的帮助
      • 可以给我你的email地址吗,下次如果有面子可以求助哈
      • 我遇到了问题,请帮我看看这里的链接stackoverflow.com/questions/34085608/…
      猜你喜欢
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 2015-01-31
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      相关资源
      最近更新 更多