Android 获取可访问性服务中的列表项位置

Android 获取可访问性服务中的列表项位置,android,android-recyclerview,android-listview,accessibilityservice,android-accessibility,Android,Android Recyclerview,Android Listview,Accessibilityservice,Android Accessibility,我试图获取列表的项目位置,以防用户点击列表中的某个项目。现在,用例是通用的,不管列表是Listview还是Recyclerview。我编写了一个小的可访问性服务来捕获事件。现在,只要我点击一个列表项,就会发生两个事件 类型\视图\聚焦 类型\窗口\状态\已更改 现在,因为在我的例子中我只想关注列表,所以我给出了一个条件来检查父对象是否是recyclerview。我已尝试使用以下方法打印索引: val source = event?.source . . . Acce

我试图获取列表的项目位置,以防用户点击列表中的某个项目。现在,用例是通用的,不管列表是Listview还是Recyclerview。我编写了一个小的可访问性服务来捕获事件。现在,只要我点击一个列表项,就会发生两个事件

  • 类型\视图\聚焦
  • 类型\窗口\状态\已更改
  • 现在,因为在我的例子中我只想关注列表,所以我给出了一个条件来检查父对象是否是recyclerview。我已尝试使用以下方法打印索引:

       val source = event?.source
       .
       .
       .
       AccessibilityEvent.TYPE_VIEW_FOCUSED -> {
               run {
                        source?.let {
                            if(it.className.contains("RecyclerView"))
                                println(AppConstants.TAG+"View Focused-------------"+it.childCount+"----"+event.fromIndex+"----"+event.toIndex+"----"+event.currentItemIndex)
                        }
                   }
       }
    
    但不知何故,在某些情况下,只有AccessibilityRecord的toIndex方法才能给出正确的结果。也就是说,当我点击一个列表项时,它会给我一个正确的索引,当我按back返回到我之前点击的列表时,如果列表的计数大于屏幕上可以显示的项目总数,则索引会改变

    假设该列表总共包含10项。我点击了第三项。现在,当我进入另一个可能包含列表或其他内容的屏幕时,上面的代码将打印:

        View Focused-------------4----0----3-----1
    
    当我回到我之前点击的列表时,它再次打印:

        View Focused-------------7----0----6-----1
    
    我需要一种方法来区分,更重要的是确定哪个索引是我最初使用的索引,就是这样

    资源稀缺。那就到这里来吧

    请帮忙。非常感谢