Android笔记-1:使用RecyclerView时候,调用adapter的notifyitemchanged()会自动滚动到顶部问题解决过程和思考

今天在使用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()会自动滚动到顶部问题解决过程和思考_第1张图片
图片发自App

你可能感兴趣的:(Android笔记-1:使用RecyclerView时候,调用adapter的notifyitemchanged()会自动滚动到顶部问题解决过程和思考)