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://11000011.com/?id=123

« 上一篇 下一篇 »

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

主机推荐

  • 搬瓦工