Android-带自定义字符串数据的NumberPicker显示错误的值?

时间:2019-05-23 02:15:43

标签: android numberpicker

这是如此简单,同时又非常困难。

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    String[] values = {"d", "aa", "a", "b"};
    NumberPicker numberPicker = findViewById(R.id.number_picker);
    numberPicker.setDisplayedValues(values);
    numberPicker.setMinValue(0);
    numberPicker.setMaxValue(3);
    numberPicker.setValue(2); // Want to show "a" in number picker
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <NumberPicker
        android:id="@+id/number_picker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

结果

enter image description here

更多情况:

  1. 如果值为{“ d”,“ c”,“ a”,“ b”},则结果为“ a”。
  2. 如果值为{“ d”,“ aaaaa”,“ a”,“ b”},则结果为“ aaaaaa”。
  3. 如果值为{“ d”,“ aa”,“ c”,“ b”},则结果为“ c”。
  4. 如果值为{“ d”,“ b”,“ a”,“ aa”},则结果为“ a”。
  5. 如果值为{“ d”,“ AA”,“ a”,“ c”},则结果为“ AA”。
  6. 如果值为{“ d”,“ ABCDAA,” a“,” c“},则结果为” ABCDAA“。

当我单击数字选择器内的任意位置时,“ aa”'ish会变成预期的“ a”。但是,尝试将numberPicker.performClick()放在setValue(2)方法之后将无济于事。

这看起来很简单,但却让我发疯。请帮助我。

2 个答案:

答案 0 :(得分:0)

tyr创建您自己的函数,以在设置NumberPicker之前修改要在NumberPicker上设置的数据。此函数可防止任何字符串成为给定数组中任何字符串的子字符串。 NumberPicker

modifyDataForNumberPicker(values);
numberPicker.setDisplayedValues(values);

private void modifyDataForNumberPicker(String[] dataList){
        int i=0;
        for(String data : dataList){
            int pos = i++;
            dataList[pos] = data+" ";
    }
} 

获取在NumberPicker中单击的值

numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
    String selectedvalue = values[newVal]           
    }
});

答案 1 :(得分:-1)

这是我找到的唯一解决此问题的线索,谢谢!我遇到了类似的问题,我的值分别是“ K-59”,“ K-58”,...“ K-01”,“ K”,“ K + 01” ...,“ K + 58”,“ K + 59”。 我希望选择器从显示“ K”开始,但是不可能做到这一点。它始终显示最后一个值(“ K + 59”,单击后更改为“ K”)。所有其他值都可以选择作为第一显示选择。 当我最终找到此帖子时,我将“ K”值修改为“ K”,后跟三个空格字符(因为您的问题随选择的长度而变化)。这使它起作用了,但是那真是太可怕了!