问题遇到场景
RecyclerView列表中点击评论或回复使输入框定位到指定位置,当隐藏输入框后RecyclerView会自动滚动
问题查找思路
断点 RecyclerView中的smoothScrollBy方法,查看触发smoothScrollBy的源头,经过断点查看调用栈发现requestChildFocus方法触发,requestChildFocus的愿意见名思意就是RecyclerView中的ChildView在获取焦点,ChildView获取焦点后会对自身定位进行展示从而触发smoothScrollBy方法
解决方法
问题的源头找到了,既然是RecyclerView中的ChildView在自动请求焦点,那么解决的办法就是不让它去自动获取焦点。在RecyclerView中添加android:descendantFocusability="blocksDescendants"属性来阻止RecyclerView中ChildView自动获取焦点。
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
好了,问题解决了,解决问题最有效和最快速的方法还是从源码去定位问题,主要的是耐心+冷静分析!!!