Android Talkback 可访问性在引入数据绑定后失去焦点

Abh*_*agi 5 android accessibility android-databinding android-jetpack android-architecture-navigation

我的团队正在使用 LiveData、BaseObservable(用于可绑定字段)和导航组件将现有的基于 MVC 的代码重新架构为 MVVM。

早些时候,我们将所有活动都以标头片段作为工具包,现在使用导航组件将单个活动与多个片段一起使用。我们正在重用标头片段,但它被放置在 Activity 内部,并且只有使用导航组件的 Activity 中的片段在其下方发生变化。

在片段 2 中,我们有一个带有隐藏布局的回收器视图。这些布局根据 BaseObservable 字段使用 xml 本身的数据绑定变得可见/消失。

以下是布局。
第一行显示导航,第二行显示片段 2 中的问题

在此输入图像描述



辅助功能问题
之前使用对讲时一切正常。但是现在,当我们单击回收器视图中的某个项目并展开该项目并对子文本 1 执行单击操作时,新的子文本 2 变得可见,但无法保留辅助功能焦点。它的焦点持续几秒钟,然后焦点从回收器视图转移到标题图块,如图所示。这导致辅助功能对讲流程出现问题。

要求:子文本 2 应保留可访问性焦点。

子文本 2
旧代码的 onClickListener 中使用的代码片段

holder.subText2.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
Run Code Online (Sandbox Code Playgroud)

新代码

binding.subText2.performAccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
binding.subText2.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
Run Code Online (Sandbox Code Playgroud)
使用具有可访问性的数据绑定和 BaseObservable Bindable 字段是否存在问题?
或者问题是别的?

我怎样才能让它发挥作用并将可访问性焦点保留在子文本 2 上?

更新
添加以下代码后,它可以正常工作。但我想避免使用view.requestFocus(). 是否可以???

AccessibilityManager am = (AccessibilityManager)context.getSystemService(Context.ACCESSIBILITY_SERVICE);
    if(am.isEnabled()){
        view.requestFocus();
        view.performAccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
        view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
    }
Run Code Online (Sandbox Code Playgroud)