Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带有自定义值的数字选择器在点击时显示错误数据_Android_Focus_Picker_Numberpicker - Fatal编程技术网

Android 带有自定义值的数字选择器在点击时显示错误数据

Android 带有自定义值的数字选择器在点击时显示错误数据,android,focus,picker,numberpicker,Android,Focus,Picker,Numberpicker,我只有在安卓4+上才有这个问题。当我尝试较低版本时,它似乎工作正常 我想做一个从-30到30的数字选择器 我试着这样做: mypicker = (NumberPicker) findViewById(R.id.picker); String[] values = new String[61]; for (int i = 0; i < 61; i++) { int value = 30 - i; values[i] = (value >= 0

我只有在安卓4+上才有这个问题。当我尝试较低版本时,它似乎工作正常

我想做一个从-30到30的数字选择器

我试着这样做:

mypicker = (NumberPicker) findViewById(R.id.picker);

String[] values = new String[61];

    for (int i = 0; i < 61; i++) {
        int value = 30 - i;
        values[i] = (value >= 0 ? "+ " : "- ") + Integer.toString(Math.abs(value));
    }

    mypicker.setMinValue(0);
    mypicker.setMaxValue(60);
    mypicker.setDisplayedValues(values);
    mypicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);

    mypicker.setValue(30 - myValue); 
mypicker=(NumberPicker)findViewById(R.id.picker);
字符串[]值=新字符串[61];
对于(int i=0;i<61;i++){
int值=30-i;
值[i]=(值>=0?+”:“-”+Integer.toString(Math.abs(value));
}
mypicker.setMinValue(0);
mypicker.setMaxValue(60);
mypicker.setDisplayedValues(值);
mypicker.setDegenantFocusability(TimePicker.FOCUS\u BLOCK\u后代);
mypicker.setValue(30-myValue);
除了一件奇怪的事情,它还能工作。当我选择1、2或3,然后点击所选值数次时,它会将+1更改为+19、+2更改为+29、+3更改为+30。所有其他数字都正常

有人能帮我吗?我真的不知道为什么会这样,也不能用谷歌搜索任何答案


我也看到了同样的问题。我正在实现一个自定义时间选择器,以5分钟为增量,使用分钟值(据我所知,这不能用库存时间选择器完成。)

对于左侧选择器,我将显示值初始化为: “12”、“1”、“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 {

因此,现在敲击停止了数字问题,但当然还有其他更糟糕的副作用。因此,请不要把上述问题作为解决方案,这只是为了证实我的怀疑

我也有同样的问题。您可以在这里看到我的解决方案:
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);
    }       
}