Android: как заставить средство выбора номера пропускать числа

Я просмотрел несколько потоков о том, как программно изменить средство выбора чисел и запустить OnValueChangedListener. Ни один из них не работает на меня. Мне нужно, чтобы средство выбора чисел пропускало определенные числа, если они уже заняты в свободном слоте. Мое текущее «решение» таково:

                // Set up channel picker change event to update other items in the form
            mPickerAddress.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
                @Override
                public void onValueChange(NumberPicker numberPicker, int i, int i1) {
                    // If the user scrolls the number picker, update the other form items
                    // Check to see if this channel is already used, and inform user, and reset picker
                    int n;
                    boolean contained = false;
                    // Iterate over each custom value to see if channel is used
                    for (n = 0; n < 10; n++) {
                        if (mCustomValues[n][0] == i1) {
                            contained = true;
                        }
                    }

                    if (contained) {
                        // Check direction being moved, if moving positive, skip over that way and vice versa
                        // If positive...
                        if(i1 - i > 0){
                            pickerSkipper(mPickerAddress,true);
                        }
                        else{
                            pickerSkipper(mPickerAddress,false);
                        }
                    } else {
                        // Update address value
                        mCustomValues[mPickerChannel.getValue() - 1][mCustomAddress] = i1;
                        // Update has changed
                        hasChanged[mPickerChannel.getValue() - 1] = true;
                    }
                }
            });

Метод пропуска (код, полученный из других сообщений по этой проблеме):

    // Skips forward or backward if a value is already taken
public void pickerSkipper(NumberPicker picker, boolean skip){
    Method method;
    try {
        // reflection call for
        // higherPicker.changeValueByOne(true);
        method = picker.getClass().getDeclaredMethod("changeValueByOne", boolean.class);
        method.setAccessible(true);
        if(skip)method.invoke(picker, true);
        else method.invoke(picker, false);

    } catch (final NoSuchMethodException e) {
        e.printStackTrace();
    } catch (final IllegalArgumentException e) {
        e.printStackTrace();
    } catch (final IllegalAccessException e) {
        e.printStackTrace();
    } catch (final InvocationTargetException e) {
        e.printStackTrace();
    }
}

Этот или любой другой способ настройки отражения метода приводит к тому, что программа в конечном итоге приводит к сбою в бесконечной процедуре сборки мусора и «приостановке всех потоков: ошибки X.XXXms».

На данный момент мне не нужно использовать этот способ, я просто хочу что-то, что работает. Не может быть так сложно заставить средство выбора номера пропустить вперед, или может?

Заранее спасибо.


person tommyvdp    schedule 20.04.2017    source источник
comment
stackoverflow .com/questions/23089868/ Это может помочь вам, я думаю   -  person Mukeshkumar S    schedule 20.04.2017
comment
Спасибо за ваш вклад. Я не хочу изменять отображаемые значения. Я хочу, чтобы средство выбора чисел оценивало, было ли значение уже «принято» другим вводом, и если да, то пропускало его до тех пор, пока не появится свободное значение для отдыха. Это список каналов, которые можно использовать только один раз. Я полагаю, я мог бы попытаться удалить взятые значения из сборщика, однако...   -  person tommyvdp    schedule 20.04.2017
comment
«взято» другим вводом... Если у вас есть число или массив, вы должны сравнить и опустить это, насколько мне известно. Извините, если я потратил ваше время   -  person Mukeshkumar S    schedule 20.04.2017
comment
Спасибо, попробую, хорошее предложение. Я хотел, чтобы средство выбора явно «пропускало» взятые значения и чтобы они оставались там, но если это не сработает, это, вероятно, будет хорошо.   -  person tommyvdp    schedule 20.04.2017
comment
Дайте мне знать, если сработало, а также обновите свой ответ   -  person Mukeshkumar S    schedule 20.04.2017