NumberPicker, перехватывать, когда сборщик останавливает прокрутку
Мне нужно реализовать View с двумя numberPicker, pickerOne и pickerTwo. pickerTwo значения в зависимости от текущего значения pickerOne, поэтому, когда пользователь прокручивает pickerOne, значения внутри pickerTwo изменяются. Я реализовал pickerOne как:
NumberPicker pickerOne= new NumberPicker(context);
pickerOne.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
pickerOne.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
pickerOne.setWrapSelectorWheel(false);
pickerOne.setMinValue(0);
pickerOne.setMaxValue(pickerOneValues.length-1);
pickerOne.setDisplayedValues(pickerOneValues);
pickerOne.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker numberPicker, int i, int i1) {
Log.d("VALUE", "" + i1);
updatePickerTwoValues(i1);
}
});
Этот код хорошо работает только в том случае, если пользователь выполняет пошаговое вращение (по одному вращению за раз), но если пользователь выполняет "энергичное вращение", updatePickerTwoValues вызывается несколько раз за короткое время. Существует способ перехвата, когда подборщик останавливает вращение, поэтому только когда остановка вращения, я могу обновить значения pickerTwo?
0 ответов
Это может быть выполнено с моей библиотекой, ScrollPicker, потому что его обратные вызовы изменения значения отправляются, когда новое значение выбирается на остановке прокрутки. Есть 2 способа сделать это.
Если вы знаете привязку данных, то я рекомендую
A)
1. Привязать значения и элементы для обоих сборщиков (элементы, которые можно связать только из кода с помощью setItems(..)
).
2. Зарегистрируйте обратный вызов в значении выбора вашей модели представления, которое инициирует изменение для списка других элементов. В этом случае вам просто нужно изменить этот список в вашей модели представления, и соответствующий сборщик обновит свои элементы автоматически.
<com.github.tomeees.scrollpicker.ScrollPicker
...
app:value="@={ viewModel.pickerValue }"
/>
в XML и в коде вызова void setItems( final ObservableField< ? extends Collection > items )
,
Но вы можете сделать это без привязки данных, если хотите.
B)
Там есть addOnValueChangedListener(..)
метод для которого вы можете дать свой метод обратного вызова, который устанавливает новые элементы для другого сборщика с setItems(..)
,