最近开始做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