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
相关产品推荐
相关产品推荐

