美文网首页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