这是如此简单,同时又非常困难。
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>
结果
更多情况:
当我单击数字选择器内的任意位置时,“ aa”'ish会变成预期的“ a”。但是,尝试将numberPicker.performClick()
放在setValue(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”,后跟三个空格字符(因为您的问题随选择的长度而变化)。这使它起作用了,但是那真是太可怕了!