recyclerView 的坑
2016-04-06 18:50
323 查看
一 recyclerView 的bug 1.
https://code.google.com/p/android/issues/detail?id=77846
该问题现在还没有解决。本人是在recyclerView 从内存中重启的时候 ,想保存一个排序和原始数据恢复位置时遇到。
这里特别指出fragment的生命周期:onCreateView -> onViewCreated -> onActivityCreated -> onViewStateRestored-> onStart -> onResume
我在这里调了整整一天,都出现google的issue。原来初始化的基类初始化,在onViewCreated中调用,让我造成了这个isssue,重新异步请求刷新了一遍数据。基本上看stackoverflow和issue下面的回答,有帮助的大意是:recyclerView 的数据刷新不同步(导致滚动位置无法定位或调用scrollToPosition时不同步)。解决方法是检查下有木有重复的比较连续刷新数据,刷新数据和定位几乎同时调用。
二 bug 2 滑动问题,见第一篇文章。
http://www.jianshu.com/p/4535442d568f该文中已提出一个workaround
三 这个坑,是我自己挖的。
这里由于产品需要,recyclerView的item的高度为动态的wrap_content(建议不要使用,recyclerView由于得不到具体宽高,会多次调用getView方法),又要求recyclerView的item进行折叠。当recyclerView的数据项不满一屏时,且此时recyclerView的item由展开到折叠,此时存在视觉上的ui缓存。即该折叠项依然占据展开式的位置。此时,进行点击事件或滑动事件时,缓存的数据消失。 而采用stackoverflow上消去drawingcache 的方法没有作用:https://www.google.com.sg/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0ahUKEwjo_ue06vnLAhVBYqYKHQESCVkQFggmMAE&url=%68%74%74%70%3a%2f%2f%73%74%61%63%6b%6f%76%65%72%66%6c%6f%77%2e%63%6f%6d%2f%71%75%65%73%74%69%6f%6e%73%2f%31%34%34%31%39%35%39%37%2f%68%6f%77%2d%74%6f%2d%64%69%73%61%62%6c%65%2d%74%68%65%2d%64%72%61%77%69%6e%67%2d%63%61%63%68%65&usg=AFQjCNHua37wKKbmd3802rrE0wWXaTcvcw
在listView或此处,我使用的workaround均为Handler post方法解决。
相关文章推荐
- RecyclerView的使用之多种Item加载布局
- Android RecyclerView加载不同布局简单实现
- Android开发之RecyclerView控件
- 学习Android Material Design(RecyclerView代替ListView)
- 使用RecyclerView添加Header和Footer的方法
- Android中使用RecyclerView实现下拉刷新和上拉加载
- Android项目实战之仿网易新闻的页面(RecyclerView )
- Android应用开发中RecyclerView组件使用入门教程
- RecyclerView.Adapter
- 支持addHeaderView、 addFooterView、分页加载数据的RecyclerView
- 如何使用v7新控件RecyclerView
- RecyclerView完全解析
- 关于eclipse使用导入RecycleView时遇到的问题NoClassDefFoundError: android.support.v7.recyclerview.R$styleable
- Android RecyclerView调用notifyDataSetChanged()异常
- Android RecyclerView使用简单介绍
- 拖拽RecyclerView
- RecyclerView 的分割线(divider)--DividerItemDecoration
- 万能的RecyclerViewAdapter
- Android 使用RecyclerView 报错NoSuchMethodError
- 关于SwipeRefreshLayout和RecyclerView混合使用的代码示例