TV端 RecyclerView长按导致item焦点乱飞或丢失

TV端安卓项目中,RecyclerView在长按遥控器时可能出现焦点丢失或飞到其他控件上。原因是RecyclerView未创建所有item的View,快速移动时缺少对应焦点View。解决方法包括:1. 控制遥控器按键速度,等待item创建后再切换焦点;2. 重写RecyclerView的LayoutManager的onInterceptFocusSearch方法,自定义焦点搜索逻辑。
摘要由CSDN通过智能技术生成

       最近开始做TV端的安卓项目了,TV上的安卓项目主要问题就是要处理焦点问题。下面就对我在TV端使用RecyclerView是遇到的问题做一个总结。

 

       RecyclerView在长按遥控器的情况下会导致Item的焦点丢失或者说是飞到别的控件上。主要是因为RecyclerView设置适配器,将数据全部填充进去之后,并不会将所有的item的view创建出来,只会创建出显示和需要的item的View,没有显示的Item的View很可能没有被创建。所以在快速移动的时候,RecyclerView并没有创建那个应该获取焦点的View,所以导致焦点飞到其他可承载焦点的View上去了。

        解决这个焦点丢失的问题我目前知道有两种方法。

      一、控制遥控器按键的速度,也就是降低按键的触发速度。当下一个item创建出来之后,再让他切换焦点。代码如下:   

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    long current = System.currentTimeMillis();
    boolean dispatch;
    if (current - mLastKeyDownTime < 150) {
        dispatch= true;
    } else {
        dispatch= super
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值