我正在开发一个简单的应用程序,该应用程序以“ 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/

10-13 09:48