【问题标题】:How to avoid TalkBack from reading dismissed fragment如何避免 TalkBack 读取已关闭的片段
【发布时间】:2014-07-07 18:30:03
【问题描述】:

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

而且它工作得很好,除了片段,如果有一个加载片段的活动,对讲读取它的内容,然后用户点击一些东西和一个可以添加到堆栈顶部的细节片段。

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 Hierarchy 并且没有被解雇的片段的痕迹,但对讲仍然可以导航它:(

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

问候。

【问题讨论】:

标签: android android-fragments accessibility talkback


【解决方案1】:

我发现下面的片段不会被读取的唯一方法是在片段事务中替换它们,这是一个缺点,因为您会丢失该片段的状态......

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

我将继续研究如何正确地做到这一点。

【讨论】:

  • 您找到解决此问题的其他方法了吗?
  • @moxi 你能建议你找到的解决方案吗?我认为每次更换片段都不是通用解决方案
  • 我可以建议的唯一可行的解​​决方案是用活动替换您的片段。我在问@Goofyahead 他是否发现了什么。
【解决方案2】:

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

我发现了这个,它很好地解决了问题,无需使用替换,

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

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 嘿,我添加了解释,你能告诉我为什么投反对票吗?
  • 我没有投反对票,所以我不能真正代表谁发言,但我猜这是编辑前缺乏解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 2020-07-14
相关资源
最近更新 更多