Android Accessibility Голосовой помощник проблема в Recyclerview - PullRequest
0 голосов
/ 25 сентября 2019

Я включил голосовой помощник в Note 5 и пытался двигаться вперед (вверх-вниз), но он выходит из Recyclerview, когда достигает конца экрана.Поскольку в списке есть еще много элементов, поэтому он должен автоматически прокручиваться вверх.

Я наблюдал эту проблему в Samsung Note 5 и Samsung Note 9 , но он прекрасно работает в Samsung 9 и Samsung 9 + .

Я придерживаюсь целенаправленной истины в каждом элементе RecyclerView.Я использовал решение, но я не думаю, что это лучшее, что кто-либо может предложить мне, какой будет лучший подход.

Мое решение: я вручную прокручиваю список, обнаруживая момент.

RecyclerView

<RecyclerView>.setAccessibilityDelegateCompat(RVAccessibilityDelegate(<RecyclerView>, <No of item you want to scroll>))

RVAccessibilityDelegate

   RecyclerViewAccessibilityDelegate(recyclerView){

   private var previousItemPosition = 0

   override fun onRequestSendAccessibilityEvent(host: ViewGroup, child: View, event: AccessibilityEvent): Boolean {

       if (event.eventType == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {


           if (host is RecyclerView) {

               var childPosition = host.getChildAdapterPosition(child)

               if (childPosition == 0 && previousItemPosition == 0) {

                   host.smoothScrollToPosition(1)

               } else if (previousItemPosition < childPosition) {

                   host.smoothScrollToPosition(childPosition + scrollItem)
                   previousItemPosition = childPosition

               } else if (previousItemPosition > childPosition) {

                   var scrollUpto = childPosition - scrollItem
                   if (scrollUpto < 0) {
                       scrollUpto = 0
                   }
                   if (childPosition == 0) {
                       host.smoothScrollToPosition(childPosition)
                   } else {
                       host.smoothScrollToPosition(scrollUpto)
                   }
                   previousItemPosition = childPosition
               }
           }

           return true
       }
       return super.onRequestSendAccessibilityEvent(host, child, event)
   }
}```






...