7

アクティビティとフラグメントで構造化されたシンプルなアプリを開発しています。これは、アクセス可能にするための要件の 1 つであるため、すべてのコンテンツの説明、ナビゲーション、フォーカスなどを行いました。

そして、フラグメントを除いて、それはうまく機能します。フラグメントをロードするアクティビティがある場合、トークバックはそのコンテンツを読み取り、ユーザーは何かをクリックし、スタックの上に追加できる詳細フラグメントをクリックします。

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 を作成し、破棄されたフラグメントの痕跡はありませんが、トークバックはそれをナビゲートします:(

ありがとう、誰かがこの問題に光を当ててくれることを願っています:)

よろしく。

4

2 に答える 2

2

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

私はこれを見つけました。これは、置換を使用する必要なく問題をかなり解決しました。

このリンクは Fragment BackStage の変更について説明しています。追加されたフラグメントが最後のフラグメントではないことを確認してから、アクセシビリティを IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS に設定して、非表示のフラグメントのアクセシビリティを無効にします。

于 2020-01-20T21:07:25.587 に答える
1

以下のフラグメントが読み取られないように私が見つけた唯一の方法は、フラグメントトランザクションでそれらを置き換えることです。これは、そのフラグメントの状態を失う原因となる欠点です...

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

これを正しく行う方法を探し続けます。

于 2014-05-29T14:43:27.430 に答える