Android - NumberPicker с пользовательскими строковыми данными показывает неправильное значение? - PullRequest
0 голосов
/ 23 мая 2019

Это так просто и так трудно одновременно.

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) не поможет.

Это выглядит так просто, но это сводит меня с ума. Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 23 мая 2019

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