Android RecyclerView使用notifyItemRangeInserted的如何防止跳动


Android在处理RecyclerView时候,如果使用notifyItemRangeInserted插入数据后可能界面发生跳动,解决这个问题只需要两步

1. 把焦点优先获取权交给RecyclerView,并请求焦点,这样容器先hold住了焦点,便不会乱飞了
2. 数据更新完成后,进行焦点恢复,将焦点优先权交给子元素,然后指定特定的view请求焦点

这个方案能解决大部分焦点乱跳问题,包括快速滚动的

代码大致如下

public void holdFocus() {
    setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS);
    requestFocus();
}

public void resumeFocus(int position) {
    setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
    if (position > 0 && getLayoutManager() != null) {
        View focusView = getLayoutManager().findViewByPosition(position);
        if (focusView != null)
            focusView.requestFocus();
    }
}

注意

resumeFocus的调用可以适当做一个delay,等数据刷新


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.11000011.com/?id=123

« 上一篇 下一篇 »
«    2026年10月    »
一 二 三 四 五 六 日
1234
567891011
12131415161718
19202122232425
262728293031

控制面板

您好,欢迎到访网站!
  查看权限
«    2026年10月    »
一 二 三 四 五 六 日
1234
567891011
12131415161718
19202122232425
262728293031

控制面板

您好,欢迎到访网站!
  查看权限
您是本站第645名访客 今日有0篇新文章