导致这个问题出现的原因是由于RecyclerView加载数据并不是将所有的数据加载出来, 快速滑动的时候需要获取焦点的item并没有加载出来,这就导致焦点交给系统来处理,这样就导致了焦点丢失或乱飞的问题。
我看了一下网上的解决思路一般是两种:
出处: http://blog.csdn.net/Zou_pl/article/details/77507376
- 控制按键速度
- 重写RecyclerView的LayoutManager中的onInterceptFocusSearch接口来控制焦点
第一种方式我觉得是一种取巧的方式,而且具有随机性(降低体验度),换句话说不稳定。
第二种方式一般是下面这种形式(针对LinearLayoutManager):
首先我进行测试后发现这种方式并不能解决问题(不起效果), 其次我觉得在onInterceptFocusSearch中调用scrollToPosition这样会不符合焦点传递的流程, 这个思路本意是:在搜寻下一个焦点的时,如果需要获取焦点的item没有加载, 那么调用scrollToPostion来将它显示出来,那么它就可以获取到焦点。 不起作用的原因我觉得还是随机(不确定性)导致,我们并不能控制正好分发焦点的时候,需