我正在尝试为 RecyclerView 中的项目自定义对讲输出。我修改了 onBindViewHolder
方法以包含以下代码
itemView?.setAccessibilityDelegate(object: View.AccessibilityDelegate() {
override fun onPopulateAccessibilityEvent(host: View?, event: AccessibilityEvent?) {
super.onPopulateAccessibilityEvent(host, event)
event?.let {event ->
if (event.eventType == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
event.text.add("Hello world!")
}
}
}
})
不幸的是,对讲输出仅针对 RecyclerView
中的最后一个可见项进行修改。
我不明白为什么委托(delegate)对某些 ViewHolders
有效,而对其他 ViewHolders 无效。
最佳答案
RecyclerView
将 AccessibilityDelegates
添加到其子级,以向其子级添加自己的操作。由于 View 最多可以有一个委托(delegate),因此无论第一个添加的委托(delegate)(您的还是 RecyclerView
的委托(delegate))都会被破坏。
RecyclerView
有其 own wrapper对其子级起作用的 AccessibilityDelegate
。这就是你想要的。
关于android - 使用 onPopulateAccessibilityEvent 和 AccessibilityDelegate 自定义 recyclerview 中的可访问性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48446769/