今天在使用RecyclerView展示一个评论列表,列表的每项有一个点赞个取消点赞功能,我的实现方法是点击点赞(取消点赞)按钮,调用接口,成功之后,调用adapter的notifyitemchanged()方法刷新当前item的UI,来增加/减少点赞数量。
以上代码码完,运行成功!点赞测试,效果实现。当我以为可以收工时候,突然发现一个问题,多点几项,突然列表自动滚动到了顶部。以为是自己代码里面滚动代码被触发,多次调试测试发现并不是。于是开始寻找方法解决这个问题。
首先想到的是在notifyitemchanged后调用RecyclerView的stopscroll方法,发现没有用。又想用LayoutManager的重写canScrollVertically禁止滑动RecyclerView,想到这样无法控制滑动开关故直接放弃,没有写代码。
又在百度上搜索RecyclerView自动滑动到顶部的解决方案,发现如下帖子:http://blog.csdn.net/b14858856/article/details/52920164。
原来可以使用RecyclerView的setHasFixedSize(true)方法。
于是我先在adapter里面获取到RecyclerView,设置setHasFixedSize(true),运行后发现问题解决。可是又出现一个新问题,我的PullableRecyclerView无法加载更多了!!!我又把setHasFixedSize(true)直接放在activity里面直接调用,问题最终解决。
以上是我解决“使用RecyclerView时候,调用adapter的notifyitemchanged()会自动滚动到顶部问题”的一个过程。最终问题得到了解决。可是还遗留了几个问题:
1.setHasFixedSize的作用,官方解释,原理到底是什么?为什么就能防止自动滚动了?
2.为什么setHasFixedSize放在Adapter里面会导致自定义控件PullableRecyclerView无法下拉上拉刷新,移到activity之后怎么就可以了?
生活不止眼前的苟且,还有诗和远方~
Android笔记-1:使用RecyclerView时候,调用adapter的notifyitemchanged()会自动滚动到顶部问题解决过程和思考
网友评论