つまり、フラグメントを保持するコンテナを呼び出しsetDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS)て、すべてのフラグメントの子孫のフォーカス可能性をブロックできます。フォーカス可能性を戻すには、呼び出すことができますsetDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS)
詳細:
FrameLayout2 つのフラグメントが重なっていて、フォーカス ナビゲーションをtop_fragment配置されている場合とback_fragmentそうでない場合に制限したいとします。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/back_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<FrameLayout
android:id="@+id/top_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
addOnBackStackChangedListener()のインスタンスを最初に呼び出してFragmentManager、バックスタック リスナーを提供します。メソッド を使用してフォーカス可能性を制御するコードを記述できますsetDescendantFocusability。を使用getFragmentManager().findFragmentBy*して、現在使用されているフラグメント、一番上にあるものなどを見つけ、子孫のフォーカス可能性フラグを適切に設定できます。コンテナを入れ替える場合はメソッドtop_fragmentでバックスタックにトランザクションを追加しaddToBackStack()ます。そうすれば、バックスタックが変更されたときに、フラグメントを追加するときだけでなく、BACK でポップするときにも、フォーカス可能性の設定を変更できます。