移动端下拉刷新误触:下滑甩回顶部就自动刷新(P11-270)。
变更
- 现象:移动端历史页往下滑(把列表甩回顶部)就会触发刷新,而不是列表到顶后再按住下拉才刷新。
- 根因:所有移动端页面共用的
PullToRefreshLayout在onPostScroll里没有区分滚动来源。Compose
的惯性 fling 以NestedScrollSource.SideEffect派发增量,下滑甩回顶部后列表消费不完的剩余增量也被
累加成下拉距离,松手时一过 160dp 阈值就刷新。另有一个次要问题:下拉过半再推回去,松手仍按最大
距离触发。 - 改动:①只累加
NestedScrollSource.UserInput的下拉余量,惯性余量不再计入(对齐 material3
PullToRefresh只响应 UserInput);②新增onPreScroll:用户上滑时先把已有下拉量退回,退回部分才
消费,平时上滑滚动列表不受影响;③阈值、最大拉动距离、触发时机均未改。 - 真机判据:历史页下滑甩到顶后不自动刷新,到顶后再次按住下拉越过阈值才刷新;下拉后松手前推回去
不刷新;首页/动态/收藏/追番/UP 页等复用同一容器的页面行为一致。