diff --git a/android/build.gradle b/android/build.gradle index f81069e..da57e86 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -25,7 +25,7 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.facebook.react:react-native:+' - implementation 'com.henninghall.android:NumberPickerView:1.1.4' + implementation 'com.henninghall.android:NumberPickerView:1.1.5' implementation 'org.apache.commons:commons-lang3:3.7' implementation group: 'net.time4j', name: 'time4j-android', version: '4.2-2018i' } diff --git a/android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java b/android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java index 999ebbf..29ad817 100644 --- a/android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java +++ b/android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java @@ -13,9 +13,13 @@ import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import static android.widget.NumberPicker.OnScrollListener.SCROLL_STATE_FLING; +import static android.widget.NumberPicker.OnScrollListener.SCROLL_STATE_IDLE; + public class AndroidNative extends NumberPicker implements Picker { private Picker.OnValueChangeListener onValueChangedListener; + private int state = SCROLL_STATE_IDLE; public AndroidNative(Context context) { super(context); @@ -87,6 +91,11 @@ public class AndroidNative extends NumberPicker implements Picker { // Not needed for this picker } + @Override + public boolean isSpinning() { + return state == SCROLL_STATE_FLING; + } + @Override public void smoothScrollToValue(final int value) { final AndroidNative self = this; @@ -176,11 +185,9 @@ public class AndroidNative extends NumberPicker implements Picker { public void setOnValueChangedListener(final Picker.OnValueChangeListener listener) { this.onValueChangedListener = listener; super.setOnScrollListener(new OnScrollListener() { - int previousState = SCROLL_STATE_IDLE; - @Override - public void onScrollStateChange(NumberPicker numberPicker, int state) { - boolean stoppedScrolling = previousState != SCROLL_STATE_IDLE && state == SCROLL_STATE_IDLE; + public void onScrollStateChange(NumberPicker numberPicker, int nextState) { + boolean stoppedScrolling = state != SCROLL_STATE_IDLE && nextState == SCROLL_STATE_IDLE; if (stoppedScrolling) { new Handler().postDelayed(new Runnable() { @Override @@ -190,7 +197,7 @@ public class AndroidNative extends NumberPicker implements Picker { // the delay make sure the wheel has stopped before sending the value change event }, 500); } - previousState = state; + state = nextState; } }); } diff --git a/android/src/main/java/com/henninghall/date_picker/pickers/IosClone.java b/android/src/main/java/com/henninghall/date_picker/pickers/IosClone.java index aea14a5..5d70c8c 100644 --- a/android/src/main/java/com/henninghall/date_picker/pickers/IosClone.java +++ b/android/src/main/java/com/henninghall/date_picker/pickers/IosClone.java @@ -44,4 +44,9 @@ public class IosClone extends NumberPickerView implements Picker { public View getView() { return this; } + + @Override + public boolean isSpinning() { + return super.isScrolling(); + } } diff --git a/android/src/main/java/com/henninghall/date_picker/pickers/Picker.java b/android/src/main/java/com/henninghall/date_picker/pickers/Picker.java index 504274c..0b4a49a 100644 --- a/android/src/main/java/com/henninghall/date_picker/pickers/Picker.java +++ b/android/src/main/java/com/henninghall/date_picker/pickers/Picker.java @@ -24,6 +24,7 @@ public interface Picker { void setWrapSelectorWheel(boolean wrapSelectorWheel); void setDividerHeight(int height); void setItemPaddingHorizontal(int padding); + boolean isSpinning(); interface OnValueChangeListenerInScrolling { void onValueChangeInScrolling(Picker picker, int oldVal, int newVal); diff --git a/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java b/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java index 30171d4..4064847 100644 --- a/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java +++ b/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java @@ -32,6 +32,8 @@ public class WheelChangeListenerImpl implements WheelChangeListener { @Override public void onChange(Wheel picker) { + if(wheels.hasSpinningWheel()) return; + WritableMap event = Arguments.createMap(); TimeZone timeZone = state.getTimeZone(); SimpleDateFormat dateFormat = uiManager.getDateFormat(); diff --git a/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java b/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java index 68a6a29..913e450 100644 --- a/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java +++ b/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java @@ -180,4 +180,10 @@ public class Wheels { }}; } + public boolean hasSpinningWheel() { + for(Wheel wheel: getAll()) { + if(wheel.picker.isSpinning()) return true; + } + return false; + } }