나는 같은 문제를보고하고있다. 내가 알 수있는 한 재고 시간 선택기로 할 수없는 5 분 단위로 분 값으로 사용자 지정 시간 선택 도구를 구현하고 있습니다.
왼쪽 선택 도구로 표시 값을 "12"로 초기화합니다. 2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10 ","11 "
만약 내가 값을 1 ("1")로 설정하고 탭하면 "12"와 "1"사이를 토글합니다. 나는 NumberPicker.onTouch 코드를 분석하고 나는이 참조 :
case MotionEvent.ACTION_UP: {
removeBeginSoftInputCommand();
removeChangeCurrentByOneFromLongPress();
mPressedStateHelper.cancel();
VelocityTracker velocityTracker = mVelocityTracker;
velocityTracker.computeCurrentVelocity(1000, mMaximumFlingVelocity);
int initialVelocity = (int) velocityTracker.getYVelocity();
if (Math.abs(initialVelocity) > mMinimumFlingVelocity) {
fling(initialVelocity);
onScrollStateChange(OnScrollListener.SCROLL_STATE_FLING);
} else {
int eventY = (int) event.getY();
int deltaMoveY = (int) Math.abs(eventY - mLastDownEventY);
long deltaTime = event.getEventTime() - mLastDownEventTime;
if (deltaMoveY <= mTouchSlop && deltaTime < ViewConfiguration.getTapTimeout()) {
if (mShowSoftInputOnTap) {
mShowSoftInputOnTap = false;
showSoftInput();
} else {
내 이론이 showSoftInput 방법은 범인 것입니다. onTouch 메서드를 재정의하는 것 외에는 showSoftInput을 방지 할 수있는 방법이 없습니다. 그래서 시험에 파생 클래스 생성 :
public class FPNumberPicker extends NumberPicker {
public FPNumberPicker(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public FPNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
}
public FPNumberPicker(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_UP: {
return false;
}
}
return super.onTouchEvent(event);
}
}
그래서 지금은 도청이 숫자 문제를 중지,하지만 다른 나쁜 부작용은 물론있다. 그러니 제발 솔루션으로 위의 걸릴하지 마십시오, 그것은 단순히 내 의혹을 확인하는 것입니다.
나는 똑같은 문제가있었습니다. 내 솔루션을 볼 수 있습니다. http://stackoverflow.com/questions/31882051/numberpicker-showing-wrong-value-after-setvalue?answertab=active#tab-top –