gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:38:44 26 4
gpt4 key购买 nike

我只在 android 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);

除了一件奇怪的事情,它还能工作。当我选择 1、2 或 3,然后多次点击所选值时,它会将 +1 更改为 +19,将 +2 更改为 +29,将 +3 更改为 +30。所有其他号码工作正常。

谁能帮我解决这个问题?我真的不知道为什么会这样,也无法用谷歌搜索任何答案。

mypicker

最佳答案

我遇到了同样的问题。我正在实现一个自定义时间选择器,其分钟值以 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 {

我的理论是 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);
}
}

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

关于android - 具有自定义值的数字选择器在点击时显示错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26207477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com