Как поддерживать элементы управления dpad для RecyclerView

В настоящее время я пытаюсь подключить мобильное приложение Android к Android TV. У меня есть RecyclerView, который, кажется, правильно отображается в приложении Android TV. Я использую linearLayout для моего RecyclerView. Но, похоже, я не могу перемещаться внутри RecyclerView с помощью элементов управления dpad.

Есть идеи?

Вот интересующий xml:

<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/RecyclerView" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="left" android:background="@color/nav_bg" android:scrollbars="vertical" tools:showIn="@layout/activity_content" /> 

Solutions Collecting From Web of "Как поддерживать элементы управления dpad для RecyclerView"

Попробуйте установить android:descendantFocusability="afterDescendants" в RecyclerView

Создайте корневой вид вашего макета объекта android:focusable="true"

У моего кода возникали проблемы с тем, чтобы сосредоточиться на первом ребенке recyclerview. Как только он там был, он, похоже, хорошо справился с dpad.

Не видя больше своего кода, это лучшее предложение. Пожалуйста, предоставьте свою активность и полный xml, если это не сработает. Удачи!

В вашем xml:

  <!-- make sure this is an attribute for the layout that would get focus before the recycler view --> android:nextFocusDown="@+id/RecyclerView" <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/RecyclerView" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="left" android:background="@color/nav_bg" android:scrollbars="vertical" tools:showIn="@layout/activity_content" android:focusable="true" /> 

В вашей деятельности:

  public static final int BANNER = 0; public static final int RECVIEW1 = 1; public static final int RECVIEW2 = 2; private static int currFocus = 0; //you will need to do something similar to this listener for all focusable things RecyclerView.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { Log.i("ONFOCUSCHANGE- reclist", "focus has changed I repeat the focus has changed! current focus = " + currFocus); if(currFocus != RECVIEW1){ currFocus = RECVIEW1; RecyclerView.getChildAt(0).requestFocus(); } } });