美文网首页Android知识点和文章分享
安卓TV端使用RecyclerView的焦点异常处理

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

作者: coder小黄人 | 来源:发表于2017-06-22 10:02 被阅读0次

最近在项目中使用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毫秒的延迟,是因为滑动需要时间,当然这个时间可根据情况自己修改。

相关文章

网友评论

    本文标题:安卓TV端使用RecyclerView的焦点异常处理

    本文链接:https://www.haomeiwen.com/subject/dlptcxtx.html