我有一个有片段的活动。该片段正确地获得了可访问性焦点。但是,当用另一个片段替换第一个片段时,第二个片段不能自动获得焦点,我必须触摸该片段以获取焦点。
这是替换的方式:
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.container, myFragment)
fragmentTransaction.commit()
container.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
我尝试将android:importantForAccessibility
和android: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>
我也尝试使用添加片段,而不是用相同的结果替换。
谢谢!
答案 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);