This may help you
private fun setupAccessibility() {
val recyclerView = binding.viewPager.getChildAt(0) as? RecyclerView ?: return
recyclerView.setAccessibilityDelegateCompat(object :
RecyclerViewAccessibilityDelegate(recyclerView) {
override fun onInitializeAccessibilityNodeInfo(
host: View?,
info: AccessibilityNodeInfoCompat?
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info?.collectionInfo?.run {
info.setCollectionInfo(
AccessibilityNodeInfoCompat.CollectionInfoCompat.obtain(
max(1, rowCount % ITEMS_COUNT),
max(1, columnCount % ITEMS_COUNT),
isHierarchical,
selectionMode
)
)
}
}
override fun sendAccessibilityEventUnchecked(host: View?, event: AccessibilityEvent?) {
super.sendAccessibilityEventUnchecked(host, event)
event?.apply {
fromIndex %= ITEMS_COUNT
toIndex %= ITEMS_COUNT
itemCount = ITEMS_COUNT
}
}
override fun onInitializeAccessibilityEvent(host: View?, event: AccessibilityEvent?) {
super.onInitializeAccessibilityEvent(host, event)
event?.apply {
fromIndex %= ITEMS_COUNT
toIndex %= ITEMS_COUNT
itemCount = ITEMS_COUNT
}
}
override fun getItemDelegate(): AccessibilityDelegateCompat {
return object : ItemDelegate(this) {
override fun onInitializeAccessibilityNodeInfo(
host: View?,
info: AccessibilityNodeInfoCompat?
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info?.collectionItemInfo?.run {
info.setCollectionItemInfo(
AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain(
rowIndex % ITEMS_COUNT,
rowSpan,
columnIndex % ITEMS_COUNT,
columnSpan,
info.isHeading,
isSelected
)
)
}
}
}
}
})
}
Where ITEMS_COUNT is actual number of items (data items count)