【问题标题】:Android - NumberPicker with custom string data shows wrong value?Android - 具有自定义字符串数据的 NumberPicker 显示错误值?
【发布时间】:2019-05-23 02:15:42
【问题描述】:

这很简单,同时又很困难。

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>

结果

更多案例:

  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) 方法之后将无济于事。

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

【问题讨论】:

    标签: android numberpicker


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这是我为这个问题找到的唯一线索,谢谢!我遇到了类似的问题,我的值是“K-59”、“K-58”、...“K-01”、“K”、“K+01”...、“K+58”、“ K+59"。 我希望选择器从显示“K”开始,但不可能这样做。它始终显示最后一个值(“K+59”,单击时变为“K”)。所有其他值都可选择作为第一显示选项。 当我终于找到这篇文章时,我将“K”值修改为“K”,后跟三个空格字符(因为您的问题随选择的长度而变化)。这使它起作用了,但它是多么可怕的组合!

      【讨论】:

        猜你喜欢
        • 2014-11-30
        • 2016-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-31
        • 2011-06-05
        • 1970-01-01
        相关资源
        最近更新 更多