本来有一个需求用recyclerView
实现分页加载和元素动态宽高功能,其中分页加载通过上拉加载实现。于是看了一些文章,总结为以下的参考。
参考1. 自己实现
- 动态列数: https://www.jianshu.com/p/178ca4c439b2
总结来讲,就是在onMeasure
里根据元素的宽来动态改变GridLayoutManager
的列数。
按照文章实现AutofitRecyclerView.class
后,在xxlayout.xml你要用到的位置放置<com.xx.xx.AutofitRecyclerView>
标签即可(这个class就可以当做普通的View标签使用了)。 - 下拉刷新、上拉加载:https://blog.csdn.net/u012402124/article/details/78210639?reload
这个解决方案只支持LinearLayoutManager
。上拉、下拉加载的实现思路是监听RecyclerView的滚动。(可能会有帮助的两个函数RecyclerView#addOnScrollListener
和LinearLayoutManager#findLastVisibleItemPosition
) - 另一个实现
swipeRereshLayout
上拉加载:https://www.cnblogs.com/manmanlu/p/5736856.html
参考2. 使用开源项目:SwipeToLoadLayout
跟随教程:https://www.jianshu.com/p/a5b4d6aecf41
- maven加载https://jitpack.io失败:https://www.jianshu.com/p/cdb36b91b205
github本体:https://github.com/Aspsine/SwipeToLoadLayout/wiki/Quick-Setup
之前曾想过,项目要求在
footer
处使用@id/swipe_load_more_footer
,如果在多处SwipeToLoadLayout都用到了footer标签,会不会因为id重名产生问题。后来查看源码发现SwipeToLoadLayout只会在自己的标签内查找swipe_load_more_footer
这个id,因此不会因为重名产生问题。也就是说,SwipeToLoadLayout
可以在多处使用。
GridLayoutManager,item不居中问题
-
https://www.aliyun.com/jiaocheng/1366515.html
如果一行内元素并不在自己的格子内居中,
则需要去到元素的布局文件里,把根标签的layout_width
设置为match_parent
-
https://blog.csdn.net/hacker_crazy/article/details/78478890(同理)
同上所说,item的根布局宽度应设置为"match_parent",这样就是由GridLayoutManager
指定宽度。