关于开源库ScrollableLayout对RecyclerView支持不完善的一种解决方案
来源:互联网 发布:自己编写小软件 编辑:程序博客网 时间:2024/05/30 02:51
开源项目地址http://blog.csdn.net/w7822938/article/details/47173047
本人项目用到了这个http://blog.csdn.net/w7822938/article/details/47173047提供的库,但是发现在嵌套RecyclerView存在不完善的地方,
也就是在RecyclerView下滑的时候会存在头部布局与RecyclerView一起滑动的情况,本来的需求应该是:当RecyclerView下拉到顶部的时候头部布局才能滑动;
经过研究发现其实是ScrollableLayout判断RecyclerView是否滑动到最上面的时候有问题,
ScrollableLayout是通过成员变量mHelper的引用类ScrolableHelper来判断RecyclerView是否在顶部,
ScrolableHelper中关于RecyclerView是否在顶部的实现有问题
我的做法是:创建
MyScrollableHelper extends ScrollableHelper
实现如下:
public class MyScrollableHelper extends ScrollableHelper { private ScrollableContainer container; @Override public void setCurrentScrollableContainer(ScrollableContainer scrollableContainer) { this.container = scrollableContainer; } @Override public boolean isTop() { if (container.getScrollableView()==null)return true; if (container.getScrollableView() instanceof FindRecyclerView) { FindRecyclerView scrollableView = (FindRecyclerView) container.getScrollableView(); if (scrollableView.isTop()) return true; else return false; } return super.isTop(); }}
其中FindRecylerView实现如下
public class FindRecyclerView extends RecyclerView { public FindRecyclerView(Context context) { this(context, null); } public FindRecyclerView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public boolean isTop() { RecyclerView.LayoutManager layoutManager = getLayoutManager(); if (layoutManager instanceof LinearLayoutManager) { int firstVisibleItemPosition = ((LinearLayoutManager) layoutManager).findFirstCompletelyVisibleItemPosition(); if (firstVisibleItemPosition == 0) { return true; } } return false; }}
然后通过反射将该类注入到ScrollableLayout中实现如下
private void initView() { try {//由于该框架ScrollableLayout存在不完善的地方,所以重写了ScrollableHelper通反射注入到了框架中 Field field = scrollableLayout.getClass().getDeclaredField("mHelper"); field.setAccessible(true); MyScrollableHelper myScrollableHelper = new MyScrollableHelper(); myScrollableHelper.setCurrentScrollableContainer(this); field.set(scrollableLayout,myScrollableHelper); } catch (Exception e) { e.printStackTrace(); }}
这样问题就解决了;
当然你可以依赖他的工程直接修改他的源代码,但这样会造成编译器编译缓慢,不利于库的版本的管理以及同步
阅读全文
1 0
- 关于开源库ScrollableLayout对RecyclerView支持不完善的一种解决方案
- 不完善的arp解决方案
- 关于RecyclerView条目内嵌列表的一种常用解决方案
- ScrollableLayout
- ScrollableLayout
- Android 自带email应用对html支持不完善
- HBase SI,一个不完善的HBase 分布式事务的解决方案
- android关于轮询的一种解决方案
- 对SqlServer支持的数据库操作类的一种写法
- 关于recyclerview item的乱换位置的解决方案
- CAS SSO对手机应用支持的一种思路
- 支持setOnItemClickListener的RecyclerView
- 关于RecyclerView只显示一条数据的解决方案
- 关于Online Judge System的编译延时的一种解决方案
- 关于VB中对Unicode的支持
- 关于浏览器对标准的支持
- 关于Ruby对正则表达式的支持
- 关于PHP对discuz的支持配置。
- MQ选型对比RabbitMQ RocketMQ ActiveMQ Kafka
- sass学习、sass语法、sass函数、编辑工具koala
- Hibernate5_05查询
- org.hibernate.ObjectNotFoundException: No row with the given identifier exists解决办法
- 上下行harq概念
- 关于开源库ScrollableLayout对RecyclerView支持不完善的一种解决方案
- 相同配置的两台服务器,一台ssh进去很快,一台却慢的出奇(敲route命令也会有这种情况)
- 剑指offer_3 从尾到头打印链表
- 封装cookie
- 动态规划求有向无环图的最短路径
- POJ
- 内部类
- VLAN介绍
- dedecms调用指点栏目内容