You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Number Picker设3个选项时无法选中值2的修复请求

NumberPicker在范围1-3时无法选中值2的问题修复

问题根源

你遇到的异常是因为代码中存在一个非法操作:在已经将minValue设为1的情况下,调用selectMarkerNumPicker.setValue(0)设置了一个超出范围的值。虽然系统不会直接崩溃,但这会打乱NumberPicker的内部状态逻辑,当范围刚好是1-3三个选项时,这种状态混乱就会表现为无法选中中间的数值2。

修复方案

移除代码中多余的setValue(0)操作,调整范围时直接设置合法的min、max值,再指定目标选中值即可。

修复后的数值递增代码

// Get the maximum marker number picker value and increment in prep
// for the new marker.
Integer routes_num = selectMarkerNumPicker.getMaxValue();
routes_num += 1;

// Add 1 to current waypoint total value for this route.
int route = selectRouteNumPicker.getValue();
route_count_string[route - 1] = String.valueOf(Integer.valueOf(route_count_string[route - 1]) + 1);

// Set number picker to new/last marker position.
selectMarkerNumPicker.setMinValue(1);
selectMarkerNumPicker.setMaxValue(routes_num);
selectMarkerNumPicker.setValue(routes_num);

修复后的数值递减代码

// Always delete the last Marker.
Integer marker_num = selectMarkerNumPicker.getMaxValue();
marker_num -= 1;

Integer route_num = selectRouteNumPicker.getValue();

// If this is the last marker in a route do not delete it.  Instead tell
// user to delete route.
if(route_count_string[route_num - 1].equals("1"))
{
    // This is the last marker in a route. Do not delete it.  Instead tell
    // user to delete route.
    Toast.makeText(getApplicationContext(), "Can't Delete Last Marker\nDelete Route Instead", Toast.LENGTH_SHORT).show();
}
else
{
    // Set number picker to new/last marker position.
    selectMarkerNumPicker.setMinValue(1);
    selectMarkerNumPicker.setMaxValue(marker_num);
    selectMarkerNumPicker.setValue(marker_num);
}

修复说明

NumberPicker不允许设置超出[minValue, maxValue]范围的数值,之前的setValue(0)属于非法操作,会导致控件内部的布局、选中状态逻辑紊乱。移除该操作后,控件状态始终保持合法,1-3范围下的数值2就能正常选中了。

内容的提问来源于stack exchange,提问作者st2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:02:14