我正在开发一个简单的应用程序,该应用程序以“ Activity 和 fragment ”为结构,这是使其易于访问的要求之一,因此我进行了所有内容描述,导航,重点操作等。
除 fragment 外,它的工作原理非常好,如果有一个加载 fragment 的 Activity ,则对讲会读取其内容,然后用户单击某些内容,然后单击详细 fragment ,然后将其添加到堆栈顶部。
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
audios = AudiosListFragment.newInstance(params);
ft.add(R.id.audios_fragment_holder, audios);
ft.commit();
如果用户继续导航对讲,则仍要记住丢失 fragment 中每个元素的位置。
有什么方法可以清除事件的可访问性列表,并强制其重新获得它? Accesibility Manager似乎没有任何方法。
AccessibilityManager manager = (AccessibilityManager) getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE);
manager.getAccessibilityServiceList();
-编辑-
我尝试过但没有解决的问题。
从 fragment 中的 View 创建发送事件。
AccessibilityEvent event =
AccessibilityEvent.obtain(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
AccessibilityDelegate delegate = new AccessibilityDelegate();
v.setAccessibilityDelegate(delegate);
delegate.dispatchPopulateAccessibilityEvent(container, event);
中断该 fragment 的onResume上的所有待处理文本。
AccessibilityManager mgr = (AccessibilityManager)
getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE);
mgr.interrupt();
请求装饰器 View 注册window_content_change或window_state_change事件。
getWindow().getDecorView()
.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
-编辑-
创建了一个DumpView层次结构,并且没有被解散 fragment 的痕迹,但是对讲剧照仍然可以导航它:(
谢谢,我希望有人可以对这个问题有所了解:)
问候。
最佳答案
https://medium.com/@guygriv/accessibility-and-fragment-transactions-1aef5596f9d4
我发现了这一点,无需使用replace就可以很好地解决了这个问题,
此链接描述了 fragment BackStage的更改,检查添加的 fragment 不是最后一个 fragment ,然后将“可访问性”设置为IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS以禁用隐藏的 fragment 可访问性,否则对于可见的 fragment ,将可访问性设置为IMPORTANT_FOR_ACCESSIBILITY_YEs
关于android - 如何避免TalkBack读取已解散的 fragment ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23743803/