Java Android Tv RecyclerView设置了其项目的下一个焦点

Java Android Tv RecyclerView设置了其项目的下一个焦点,java,android,Java,Android,我在安卓电视上工作,在我们的片段中有两个水平的Recyclerview,当我使用D-pad向正确的方向滚动第一个Recyclerview时,它滚动良好,当我到达其Recycler视图的最后一个焦点项目时,焦点自动下降到第二个Recyclerview项目 如何预防 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi

我在安卓电视上工作,在我们的片段中有两个水平的Recyclerview,当我使用D-pad向正确的方向滚动第一个Recyclerview时,它滚动良好,当我到达其Recycler视图的最后一个焦点项目时,焦点自动下降到第二个Recyclerview项目

如何预防

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:orientation="vertical">


<RelativeLayout
    android:id="@+id/firstRelativeGrid"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:focusable="false"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/gridView1"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentStart="true"
        android:clipToPadding="false"
        android:focusable="false"
        android:paddingLeft="0dp"
        android:paddingRight="755dp" />


    <android.support.v7.widget.RecyclerView
        android:id="@+id/gridView2"
        android:layout_width="155dp"
        android:layout_height="200dp"
        android:layout_alignBaseline="@+id/gridView1"
        android:layout_marginLeft="0dp"
        android:focusable="false"
        android:nextFocusRight="@null"
        android:nextFocusUp="@+id/home_textview" />

</RelativeLayout>

<RelativeLayout
    android:id="@+id/secondRelativeGrid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:orientation="vertical">


    <android.support.v17.leanback.widget.MyHorizontalGridView
        android:id="@+id/gridView3"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentStart="true"
        android:clipToPadding="false"
        android:focusable="false"
        android:paddingLeft="0dp"
        android:paddingRight="754dp" />


    <android.support.v17.leanback.widget.MyHorizontalGridView
        android:id="@+id/gridView4"
        android:layout_width="155dp"
        android:layout_height="200dp"
        android:layout_alignBaseline="@+id/gridView3"
        android:layout_marginLeft="0dp"
        android:clipToPadding="false"
        android:descendantFocusability="blocksDescendants"
        android:focusable="false"
        android:paddingLeft="0dp"
        android:paddingRight="-2dp"

        />

</RelativeLayout>


尝试将
recyclerview
focusable
属性设置为
false

recyclerview.setFocusable(false);

可能已经晚了,但对于仍在寻找解决方案的任何人来说:

您应该在搜索下一个焦点时编写自己的逻辑,如果在列表末尾,则应将最后一个视图作为下一个焦点项提供,或者您可以根据需要修改逻辑。例如:

override fun onInterceptFocusSearch(focused: View?, direction: Int): View? {
    val position = getPosition(focused)
    val count = itemCount
    lastKnownPosition = position
    return if (position == count - 1 && direction == View.FOCUS_RIGHT) {
        focused
    } else {
        super.onInterceptFocusSearch(focused, direction)
    }
}

此方法将成为布局管理器的一部分。

我很晚才发布此答案,但有一种方法可以做到,即在适配器类中检查该项是否为第一项,并将nextFocusLeftId设置为自身。 例如 itemview.setnextFocusLeftId(itemview.gedId) 对recycler视图的最后一个元素执行相同的操作