RecyclerView项目失去重点 [英] RecyclerView items lose focus
问题描述
在我的消防电视应用程序中,我将recyclerview
与horizontal layout
结合使用.
In my fire tv app I'm using a recyclerview
with horizontal layout
.
使用dpad滚动可以工作,并且项目也越来越受到关注.
Scrolling with dpad works and also items are gaining focus.
但是,当我按住该按钮时,它会快速滚动,因为触发了许多按键事件,并且物品失去了焦点,并且无法滚动,因为recyclerview上方的另一个Textview
正在获得焦点.
But when I hold the button it scrolls very fast because many keydown events are triggered, and items are losing their focus and it's not possible to scroll anymore because another Textview
above my recyclerview is gaining the focus.
它看起来像个错误.有什么解决方法吗?
It looks like a bug. Is there any workaround for this?
推荐答案
我认为@ tmm1的答案是迄今为止最好的答案.如果用户使用DPAD滚动得太快,我已经成功实现了此变通方法,以解决RecyclerView失去焦点中加载的元素的问题.
I think the answer by @tmm1 is the best one so far. I have successfully implemented this workaround for the issue of elements loaded in a RecyclerView loosing focus if user uses the DPAD too quickly to scroll.
在RecyclerView的适配器中,我使用LayoutInflater像这样为我的元素视图充气
In my RecyclerView's adapter I use a LayoutInflater to inflate my element views like this
@Override
public ListItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_keyboard_key, viewGroup, false);
return new ListItemViewHolder(itemView);
}
我的item_keyboard_key.xml最初是这样定义的
My item_keyboard_key.xml were originally defined like this
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_keyboard_key_layout"
android:orientation="vertical"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/item_keyboard_key_text"
android:text="A"/>
</FrameLayout>
然后,我创建了一个新的自定义FrameLayout类(FocusFixFrameLayout),该类扩展了FrameLayout并将其用作我的根布局.然后我的item_keyboard_key.xml变成了
Then I created a new custom FrameLayout class (FocusFixFrameLayout) extending FrameLayout and using this as my root layout. My item_keyboard_key.xml then became
<?xml version="1.0" encoding="utf-8"?>
<no.bluebit.views.FocusFixFrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_keyboard_key_layout"
android:orientation="vertical"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/item_keyboard_key_text"
android:text="A"/>
</no.bluebit.views.FocusFixFrameLayout>
和我的FocusFixFrameLayout类如下
and my FocusFixFrameLayout class looks like this
public class FocusFixFrameLayout extends FrameLayout {
public FocusFixFrameLayout(@NonNull Context context) {
super(context);
}
public FocusFixFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public FocusFixFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public FocusFixFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void clearFocus() {
if(this.getParent() != null)
super.clearFocus();
}
}
这篇关于RecyclerView项目失去重点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!