Java Android Tv RecyclerView设置了其项目的下一个焦点
我在安卓电视上工作,在我们的片段中有两个水平的Recyclerview,当我使用D-pad向正确的方向滚动第一个Recyclerview时,它滚动良好,当我到达其Recycler视图的最后一个焦点项目时,焦点自动下降到第二个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
<?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视图的最后一个元素执行相同的操作