Browse Source

bugfix: onDateChange not called on tapped (#240)

master
Henning Hall 5 years ago
committed by GitHub
parent
commit
310e84cfca
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 38 additions and 24 deletions
  1. +38
    -24
      android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java

+ 38
- 24
android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java View File

@ -20,6 +20,7 @@ public class AndroidNative extends NumberPicker implements Picker {
private Picker.OnValueChangeListener onValueChangedListener; private Picker.OnValueChangeListener onValueChangedListener;
private int state = SCROLL_STATE_IDLE; private int state = SCROLL_STATE_IDLE;
private OnValueChangeListenerInScrolling listenerInScrolling;
public AndroidNative(Context context) { public AndroidNative(Context context) {
super(context); super(context);
@ -158,13 +159,7 @@ public class AndroidNative extends NumberPicker implements Picker {
public void run() { public void run() {
changeValueByOne(self, increment); changeValueByOne(self, increment);
if (isLast) { if (isLast) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
onValueChangedListener.onValueChange();
}
// the delay make sure the wheel has stopped before sending the value change event
}, 500);
sendEventIn500ms();
} }
} }
}, ms); }, ms);
@ -172,34 +167,53 @@ public class AndroidNative extends NumberPicker implements Picker {
@Override @Override
public void setOnValueChangeListenerInScrolling(final OnValueChangeListenerInScrolling listener) { public void setOnValueChangeListenerInScrolling(final OnValueChangeListenerInScrolling listener) {
listenerInScrolling = listener;
}
@Override
public void setOnValueChangedListener(final Picker.OnValueChangeListener listener) {
this.onValueChangedListener = listener;
final Picker self = this; final Picker self = this;
super.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { super.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override @Override
public void onValueChange(NumberPicker numberPicker, int from, int to) {
listener.onValueChangeInScrolling(self, from, to);
public void onValueChange(NumberPicker numberPicker, int oldVal, int newVal) {
if(listenerInScrolling != null) {
listenerInScrolling.onValueChangeInScrolling(self, oldVal, newVal);
}
// onValueChange is triggered also during scrolling. Since we don't want
// to send event during scrolling we make sure wheel is still. This particular
// case happens when wheel is tapped, not scrolled.
if(state == SCROLL_STATE_IDLE) {
sendEventIn500ms();
}
} }
}); });
}
@Override
public void setOnValueChangedListener(final Picker.OnValueChangeListener listener) {
this.onValueChangedListener = listener;
super.setOnScrollListener(new OnScrollListener() { super.setOnScrollListener(new OnScrollListener() {
@Override @Override
public void onScrollStateChange(NumberPicker numberPicker, int nextState) { 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
public void run() {
listener.onValueChange();
}
// the delay make sure the wheel has stopped before sending the value change event
}, 500);
}
state = nextState;
sendEventIfStopped(nextState);
state = nextState;
} }
}); });
} }
private void sendEventIfStopped(int nextState){
boolean stoppedScrolling = state != SCROLL_STATE_IDLE && nextState == SCROLL_STATE_IDLE;
if (stoppedScrolling) {
sendEventIn500ms();
}
}
private void sendEventIn500ms(){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
onValueChangedListener.onValueChange();
}
// the delay make sure the wheel has stopped before sending the value change event
}, 500);
}
} }

Loading…
Cancel
Save