返回
RecycleView滑动定位失败记
Android
2024-01-24 17:02:55
前段时间开的新项目,现在终于开始动工了,我和另一个小伙伴一起做,由于他还在处理另一个项目的尾巴,所以前期只有我一个人来做。之后我也会围绕着这个项目来讲一些我遇到的一些问题,和联想发散的一些问题。
“精品话题”板块,这部分我用 recycleview 做了个横向滑动,然后让女朋友试用…
失败的尝试
本来很顺利,但是后来我女朋友在使用时反馈说,滑动到某一个位置会出现卡顿,然后会直接跳到列表的末尾。
我一开始以为是网络问题,就让她检查了一下网络,确认没问题后,我就开始排查代码。
排查过程
首先我查看了日志,发现并没有任何异常,然后我尝试在模拟器上复现这个问题,但是并没有复现成功。
于是我让她把手机给我,自己亲自试了一下,发现果然在滑动到某一个位置时会出现卡顿,然后直接跳到列表的末尾。
定位问题
我尝试在不同机型上测试,发现只有在她那部手机上会出现这个问题,这让我怀疑是手机的问题。
但是她之前用其他 app 时并没有出现过类似的问题,所以我又排查了一下代码,发现了一个问题:
recyclerView.scrollToPosition(position);
我是在滑动过程中调用了这个方法,导致在滑动过程中如果快速滑动,就会出现跳到列表末尾的问题。
解决方案
我将这个方法改成在滑动结束后调用,问题就解决了。
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
int position = recyclerView.getChildAdapterPosition(recyclerView.findChildViewUnder(
recyclerView.getWidth() / 2, recyclerView.getHeight() / 2));
recyclerView.scrollToPosition(position);
}
}
});
总结
这次失败的经历让我学到了以下几点:
- 在开发过程中,一定要注意排查异常和错误,不要放过任何细节。
- 在使用第三方库时,一定要仔细阅读文档,了解其使用方法和限制。
- 在设计 UI 时,要考虑用户的使用习惯,避免出现不符合用户预期的操作。
- 在进行性能优化时,要从多个方面考虑,包括代码优化、网络优化和 UI 优化。
希望这篇文章能给其他 Android 开发者带来一些帮助,也希望大家在开发过程中遇到问题时,不要轻言放弃,要耐心排查,找到问题的根源,并找到合适的解决方案。