安卓TV端使用RecyclerView的焦点异常处理

最近在项目中使用RecyclerView,遇到了一些焦点问题,特此记录下。

  1. 在删除一个item或者分页加载新的数据后,使用notifyDataSetChanged()方法后,焦点会消失或跳到其他位置,解决方案如下:
  • 在Adapter中重写getItemId()方法,此方法用来唯一标识一个item。

            @Override  
            public long getItemId(int position) {  
                return position;  
            }```
    
  • 设置唯一标识生效。

          adapter.setHasStableIds(true);
    
  • 禁用掉RecyclerView的动画。

         mRecyclerView.setItemAnimator(null);
    
  1. 开发中产品要求点击某个item后返回来焦点还要在之前的位置上,解决方法也很简单,就是记录之前的焦点位置,返回后让RecyclerView滑动过去:
       recyclerView.scrollToPosition(actorFocusPosition);
       recyclerView.postDelayed(new Runnable() {
           @Override
           public void run() {
               View view = recyclerView.getLayoutManager()
                                   .findViewByPosition(actorFocusPosition);
              if (view != null) {
                   view.requestFocus();
               }
           }
       }, 50);

设置了50毫秒的延迟,是因为滑动需要时间,当然这个时间可根据情况自己修改。

    原文作者:coder小黄人
    原文地址: https://www.jianshu.com/p/3186ede0f549
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞