NumberPicker останавливает приложение при изменении видимости или высоты при прокрутке - PullRequest
0 голосов
/ 26 марта 2020

Я работаю над приложением, и у меня есть макет с элементами, которые при нажатии показывают под ним NumberPicker, например:

enter image description here

Я использую родной Android NumberPicker. NumberPickers начинаются с видимости GONE, и их видимость переключается при нажатии элемента над ними. Тем не менее, я обнаружил, что если пользователь пытается закрыть средство выбора таким образом, когда оно все еще прокручивается (например, сильно ударить по средству выбора, а затем сразу же нажать элемент, чтобы закрыть это средство выбора, пока оно все еще прокручивается), то оно вызывает застрять в бесконечном l oop, замораживая и в конечном итоге сбой приложения. Регистрация onValueChangedListener для NumberPicker показывает следующие журналы:

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, думая, что может просто остановить прокрутку
  • , вызывая setEnabled(false), прежде чем скрыться NumberPicker
  • , вызывающий performClick() перед тем, как скрыть NumberPicker
  • , вызывающий dispatchTouchEvent(...) перед тем, как скрыть NumberPicker
  • , вызывающий jumpDrawablesToCurrentState() в NumberPicker и его родительском представлении
  • вызов scrollBy(0, 0) перед сокрытием NumberPicker

Во всех случаях анимация прокрутки не изменялась, и приложение зависало при попытке скрыть средство выбора.

Есть ли Как я могу остановить прокрутку NumberPicker, чтобы я мог скрыть представление без этой проблемы зацикливания? Или, может быть, есть способ безопасно скрыть и раскрыть сборщики, не вызывая их l oop таким образом?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...