Android 在滚动时更改可见性或高度时,NumberPicker会冻结应用程序

Android 在滚动时更改可见性或高度时,NumberPicker会冻结应用程序,android,android-number-picker,Android,Android Number Picker,我正在开发一个应用程序,我有一个带有项目的布局,当按下时,项目下方会显示一个数字图标,如下所示: 我正在使用本机Android NumberPicker。NumberPickers以visibilityGONE开始,当按下上面的项目时,它们的可见性被切换。然而,我发现,如果用户试图在选择器仍在滚动时以这种方式关闭选择器(例如,在选择器上用力滑动,然后在选择器仍在滚动时立即按下该项以关闭该选择器),则会导致选择器陷入无限循环,冻结并最终导致应用程序崩溃。记录NumberPicker的onValu

我正在开发一个应用程序,我有一个带有项目的布局,当按下时,项目下方会显示一个数字图标,如下所示:

我正在使用本机Android NumberPicker。NumberPickers以visibility
GONE
开始,当按下上面的项目时,它们的可见性被切换。然而,我发现,如果用户试图在选择器仍在滚动时以这种方式关闭选择器(例如,在选择器上用力滑动,然后在选择器仍在滚动时立即按下该项以关闭该选择器),则会导致选择器陷入无限循环,冻结并最终导致应用程序崩溃。记录NumberPicker的
onValueChangedListener
,将显示以下日志:

2020-03-25 16:13:39.545 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 4
2020-03-25 16:13:39.545 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 5
2020-03-25 16:13:39.545 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 6
2020-03-25 16:13:39.545 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 7
2020-03-25 16:13:39.558 30393-30393/com.example.expandablepicker.debug W/View: requestLayout() improperly called by android.widget.NumberPicker$CustomEditText{f549769 IFED..CL. ......I. 0,0-1080,10 #1020386 android:id/numberpicker_input} during layout: running second layout pass
2020-03-25 16:13:39.560 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 6
2020-03-25 16:13:39.561 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 5
2020-03-25 16:13:39.561 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 4
2020-03-25 16:13:39.561 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 3
2020-03-25 16:13:39.561 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 2
2020-03-25 16:13:39.561 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 1
2020-03-25 16:13:39.561 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 0
2020-03-25 16:13:39.569 30393-30393/com.example.expandablepicker.debug I/chatty: uid=10345(com.example.expandablepicker.debug) identical 283 lines
2020-03-25 16:13:39.569 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 0
2020-03-25 16:13:39.569 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 0
2020-03-25 16:13:39.569 30393-30393/com.example.expandablepicker.debug I/ExpandingPickerItem: value change, 0
2020-03-25 16:13:39.572 30393-30393/com.example.expandablepicker.debug I/chatty: uid=10345(com.example.expandablepicker.debug) identical 93 lines
我还实现了一个版本,其中NumberPicker的可见性变化是动画的,因此它会向外和向内扩展,而不是仅仅显示出来。我用一个动画实现了这一点,它改变了NumberPicker的高度。在这种情况下,拾取程序会在关闭动画的一半左右停止,就像它在更改可见性时停止一样

在我试图关闭之前,我尝试了几种不同的方法来停止NumberPicker的滚动。到目前为止,没有一个成功。我试过(没有特别的顺序)

  • 调用
    setValue
    到NumberPicker的最后一个已知值,认为这可能会停止滚动
  • 在隐藏NumberPicker之前调用
    setEnabled(false)
  • 在隐藏NumberPicker之前调用performClick()
  • 在隐藏NumberPicker之前调用dispatchTouchEvent(…)
  • 在NumberPicker及其父视图上调用jumpDrawablesToCurrentState()
  • 在隐藏NumberPicker之前调用scrollBy(0,0)
在所有情况下,滚动动画都不会受到影响,并且当试图隐藏选取器时,应用程序将冻结

有没有什么方法可以停止NumberPicker的滚动,这样我就可以隐藏视图而不会出现循环问题?或者也许有一种方法可以安全地隐藏和显示选择器,而不会导致它们以这种方式循环


谢谢

你能分享代码,突出显示错误行吗?嗨,你在这方面成功了吗?针对安卓10时也有同样的问题