android tv常见问题(三)RecyclerView的焦点记忆

如需转载请评论或简信,并注明出处,未经允许不得转载

系列文章

  • android tv常见问题(一)焦点查找规律
  • android tv常见问题(二)如何监听ViewGroup子View的焦点状态
  • android tv常见问题(三)RecyclerView的焦点记忆
  • android tv常见问题(四)焦点变化时,Recyclerview是如何进行滚动的

github地址

https://github.com/Geekholt/TvFocus

目录

期望结果

RecyclerView能够对焦点路径记忆。


3.1.gif

问题分析

也就是说,当焦点从RecyclerView上移出的时候,需要保存RecyclerView当前聚焦的View,下次RecyclerVIew将要获得焦点的时候,主动聚焦到上一次聚焦的View上。

解决方案

  1. 设置RecyclerView在优先于它的子View获取焦点
setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
this.setFocusable(true);
  1. 在requestChildFocus方法中记录被聚焦的view
@Override
public void requestChildFocus(View child, View focused) {
       super.requestChildFocus(child, focused);
    if (null != child) {
        //取得获得焦点的item的position
        mLastFocusPosition = getChildViewHolder(child).getAdapterPosition();
    }
}
  1. 在RecyclerView将要获取焦点的时候,主动设置上次一聚焦的View去获取焦点
@Override
public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
      View lastFocusedView = getLayoutManager().findViewByPosition(mLastFocusPosition);
      lastFocusedView.requestFocus();
      return false;
}

你可能感兴趣的:(android tv常见问题(三)RecyclerView的焦点记忆)