如何避免TalkBack读取被解散的片段

时间:2014-05-19 17:32:49

标签: android android-fragments accessibility talkback

我正在开发一个简单的应用程序,其结构为活动和碎片,这是使其可访问的要求之一,因此我做了所有内容描述,导航,焦点等。

它的效果很好,除了片段,如果有一个活动加载一个片段,对讲读取其内容,那么用户点击一些东西和一个可以添加到堆栈顶部的细节片段。

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
audios = AudiosListFragment.newInstance(params);
ft.add(R.id.audios_fragment_holder, audios);
ft.commit();

如果用户继续导航对讲,请记住丢失片段的每个元素的位置。

有没有办法清除事件的辅助功能列表并强制它再次获取?可访问性管理器似乎没有任何方法。

AccessibilityManager manager = (AccessibilityManager) getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE);
    manager.getAccessibilityServiceList();

- 已编辑 - 我尝试过的事情并没有成功。

从片段中的视图创建中发送事件。

    AccessibilityEvent event =
    AccessibilityEvent.obtain(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
    AccessibilityDelegate delegate = new AccessibilityDelegate();
    v.setAccessibilityDelegate(delegate);
    delegate.dispatchPopulateAccessibilityEvent(container, event);

中断片段的onResume上的所有待处理文本。

 AccessibilityManager mgr = (AccessibilityManager)
 getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE);
 mgr.interrupt();

请求装饰器视图注册window_content_change或window_state_change事件。

 getWindow().getDecorView()
    .sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);

- 已编辑 - 制作了一个DumpView层次结构,并且没有被解散的片段的痕迹,但是对讲的剧照导航它:(

谢谢,我希望有人能对这个问题有所了解:)

问候。

2 个答案:

答案 0 :(得分:1)

https://medium.com/@guygriv/accessibility-and-fragment-transactions-1aef5596f9d4

我发现了这一点,无需使用replace即可解决问题,

此链接描述了片段BackStage的更改,检查添加的片段不是最后一个片段,然后将“可访问性”设置为IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS以禁用隐藏的片段可访问性,否则为可见的片段设置可访问性为IMPORTANT_FOR_ACCESSIBILITY_YEs

答案 1 :(得分:0)

我找到的唯一方法是让下面的片段不被读取在片段事务中替换它们,这是一个缺点,因为你松开了片段的状态......

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
BookDetailFragment book = BookDetailFragment.newInstance(id);
ft.replace(R.id.books_fragment_holder, book);
ft.addToBackStack(BookDetailFragment.TAG);
ft.commit();

我将继续关注如何正确地做到这一点。