替换后片段未获得可访问性焦点

时间:2018-07-17 07:18:19

标签: android android-fragments accessibility

我有一个有片段的活动。该片段正确地获得了可访问性焦点。但是,当用另一个片段替换第一个片段时,第二个片段不能自动获得焦点,我必须触摸该片段以获取焦点。

这是替换的方式:

val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.container, myFragment)
fragmentTransaction.commit()
container.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)

我尝试将android:importantForAccessibilityandroid:clickable="true"添加到第二个片段(该片段没有获得可访问性焦点)

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical"
    android:clickable="true"
    android:focusable="true"
    android:importantForAccessibility="yes">

    ...

</LinearLayout>

我也尝试使用添加片段,而不是用相同的结果替换。

谢谢!

3 个答案:

答案 0 :(得分:1)

另一种解决方案-您可以简单地通知用户有关屏幕更改的信息。如果片段包含工具栏,则可以在显示片段时将其设置为焦点。或者您可以专注于第一个/主要合理元素。这样,它将向用户宣布一个新屏幕,它将对用户有更大的帮助。

toolbar.requestFocus()
toolbar.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)

答案 1 :(得分:0)

请使用以下代码 在进行片段事务之前的第一个片段中。

 FriendRecyclerView.setAdapter(FriendsRecyclerViewAdapter);
 FriendsRecyclerViewAdapter.notifyDataSetChanged();

希望这会有所帮助。

答案 2 :(得分:0)

您可以在片段onActivityCreated方法中执行可访问性操作,如下所示

getParentActivity().getToolbar().
          performAccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);