scwang90 / SmartRefreshLayout

🔥下拉刷新、上拉加载、二级刷新、淘宝二楼、RefreshLayout、OverScroll,Android智能下拉刷新框架,支持越界回弹、越界拖动,具有极强的扩展性,集成了几十种炫酷的Header和 Footer。
https://segmentfault.com/a/1190000010066071
Apache License 2.0
24.81k stars 4.94k forks source link

作者:建议收集 #72

Open scwang90 opened 7 years ago

scwang90 commented 7 years ago

如果你对本库有什么功能建议可以在这里回复,点赞数高的回复将会被加入开发计划

以下内容会被直接删除

1.在这里问问题

2.建议已存在的功能

zxyaust commented 7 years ago

希望能加上上拉加载更多的时候,如果没有更多数据了,就一直显示加载的布局,并且显示没有更多了,这样的功能真的是非常常见,非常刚需的,依靠其他的baseadapter库去实现很烦人的,而在这个库里面应该实现起来要简单的多,谢谢,辛苦了

作者回复:该功能已经有了,请不要提出已有功能

refreshLayout.setLoadmoreFinish(true); //V1.0.0(1.0.5 删除)
or
refreshLayout.setNoMoreData(true);//V1.0.5
or
refreshLayout.finishLoadmoreWithNoMoreData();//V1.0.4
or
refreshLayout.finishLoadMoreWithNoMoreData();//V1.1.0
Carecluse commented 7 years ago

感谢开源灵活性这么好的库,只是希望可以添加类似淘宝二楼的二级刷新功能,目前的RefreshState还不能完全满足需求

作者:看到并喜欢的同学给本楼点赞!点赞数量决定是否开发本功能!

作者:2017-12-6 开发完毕,版本必须 1.0.4-2 以上,参考demo-淘宝二楼页面

tanranran commented 6 years ago

横向刷新,比如 qq 20170809220354 左拉刷新或者右拉刷新.

作者:水平左右拉动功能,并不是标准的刷新功能,应用情况也不多,这个功能不会被集成在库中。如果项目中有这样的需求,建议使用github的其他库解决

推荐:linuxjava/HorizontalRefreshLayout 29995270/HorizontalRefreshLayout

作者:最近(2019-2-13)我突发奇想,想到了 smart 旋转 90度, content 旋转 -90 度的方法来实现,这样就只需要做代码适配,不需要重新构建逻辑,并且完美兼容原有所有的 Header 和 Footer。所以又开源了一个 水平刷新库 SmartRefreshHorizontal 欢迎大家多多 star

scrylove commented 6 years ago

请增加可定制的下来刷新功能:根据下拉高度,决定头部gif当前的帧数。 比如,一个圆形进度条,根据下拉高度,显示进度条的百分比。 我可能说的不是很清楚,表达能力有限,这种效果很多应用都有,比如YY的下拉刷新效果。

作者回复:自定义 Header 功能已经有了哈,请不要提出已有功能!

abings commented 6 years ago

在下拉刷新状态下,列表内容可以滑动,但是header不能跟随滑动,这种情况比较符合逻辑,请考虑。谢谢

作者回复:你说的这个逻辑是老式的刷新啦,效果看起来死板,现在的刷新都是Header跟随列表一起滚动的,github 上多个有名的 刷新库都是这样的。本建议不会被采纳。

zhangyalong123feiyu commented 6 years ago

嵌套布局时,如果有上拉的话,顶部布局会跟随滚动,希望可以提供不让布局移动的方法。

作者回复:这个功能已经有了,参考demo-微博列表,请不要提出已有功能

wangdakuan commented 6 years ago

在下拉刷新与上拉刷新时可能网络问题导致时间长,用户滑动列表查看其它数据后,在进行下拉刷新或上拉加载更多时没有粘性与拉动的效果,这个可以优化下吗

作者回复:正在加载或者刷新的时候效果就是故意这么设计的,不是bug,不存在再优化的问题

652028815 commented 6 years ago

可以做个类是天猫商品搜索,上拉加载更多时预加载的功能吗

作者回复:自己的事情自己做哈,不要什么都依赖别人,这些和刷新无关的东西大家就不用再提了

a3349384 commented 6 years ago

希望可以添加结束刷新的功能,并且结束刷新之后可以马上启动刷新。大致的期望是如下代码可以正常工作:

autoRefresh();
finishRefresh();
autoRefresh();

目前的效果是:第二次刷新操作并不会执行。看了下代码可能是finishRefresh内部使用View.post()造成的。

作者回复:不管是 autoRefresh 还是 finishRefresh 都有一个动画过程,需要时间,不可能立即完成的,而且你这样的应用场景实在想不到什么情况会用到,像这样特别的功能你真的必要,建议自己重写SmartRefreshLayout 的子类来实现,作者是不会为了小众需求而去动整体设计的

wenchaosong commented 6 years ago

setOnMultiPurposeListener 这个监听需要复写10个方法,代码太多了 建议是需要复写什么方法,使用者自己去复写,不用全部

最直观的例子: 很多类只有下拉刷新,每个类需要处理的逻辑不同,那每个类都需要重写不需要的 foot 相关监听 代码多很多

作者回复:本来就不用全部啊,使用方法看demo

guoyongxing commented 6 years ago

可以实现未滚动到最底部 自动加载更多么?就是离滚动底部 还有断距离 加载更多

作者回复:建议自己实现

AndSync commented 6 years ago

建议 readme 中 将“简单用例” 放在效果演示上面 合适的位置 这样就不用每次忘下翻半天看有没有新版了

作者回复:这个顺序并不是随意决定的,之前早就经过慎重考虑过的,不会改变

z2058550226 commented 6 years ago

建议不要在上拉回弹的时候拦截点击事件,这样回弹之后没有完成时布局中的点击事件全部失效

作者回复:然而并没有拦截,请使用最新版本

image 上面是1.0.4-7中的SmartRefreshLayout 中的 dispatchTouchEvent方法,在action up 和action cancel时如果判断是松手就会return true拦截点击事件

作者回复:对于 action up 和action cancel 的拦截,最初是打算在 mIsBeingDragged=true 的时候会拦截,可能后来多次改动忘记了初衷, 1.0.5 版本已经更新算法,只有 mIsBeingDragged=true时会拦截

shangqianglong commented 6 years ago

可不可以设置触发下拉刷新的 的条件

作者回复:可以自定义 canRefrsh,详情参考 功能自定义滚动边界

shengjunhu commented 6 years ago

希望能够把 经典 的类型剥离出来,SmartRefresh功能越来越多,但是也越来越臃肿了,一个刷新的控件都达到了9M多的apk。

作者:Smart 的大小只有 139KB 而已,不要随便甩锅

isliuqihang commented 6 years ago

有没有考虑多加几种上拉加载的样式?

作者:

1.本库的上拉加载体验并不好,不打算在上面多下功夫,建议使用Adapter实现的上拉加载功能

推荐:https://github.com/CymChad/BaseRecyclerViewAdapterHelper

2.非要使用本库的功能,又想使用各种样式的footer,可以看看这个文章

链接:https://www.jianshu.com/p/e4e8a41a75b6
pcxjsl commented 6 years ago

添加有滑动删除按钮的功能~

作者:和刷新无关的功能是不会添加的

abc8312111 commented 6 years ago

可否添加一个状态为加载完成状态。底部出现一行字为加载完成

作者:有了,去看文档,noMoreData

HouChengYue commented 6 years ago

我觉得可以写个全局代码配置,比如我想他能自动加载更多,没有更多的界面是自动显示fotter 这样的设置,不想每一个都要写。

作者:1.0.0 版本早就有啦,看文档和常见问题和demo

wangkunlin commented 5 years ago
@Override
public void onViewRemoved(View child) {
    super.onViewRemoved(child);
}

@Override
public void onViewAdded(View child) {
    super.onViewAdded(child);
}

建议对这两个 函数做下处理。比如在配合 LoadSir 使用时,可能导致界面不显示。

shangxiazuoyou commented 5 years ago

建议适配多语言。

287138531 commented 5 years ago

希望有kotlin的版本。。。

lgj860123 commented 5 years ago

你好 ,如果上拉加载到没有数据了,你这里现在是显示没有更多数据,如何替换成一张图片呢?

inchtime commented 5 years ago

建议支持下996icu协议

Tenker commented 5 years ago

finishRefresh()方法中建议不要加Delay操作,这样如果第一页数据就需要设置noMoreData的话设置不上,因为每次设置完noMoreData都会被finishRefresh方法给重置掉,因为finishRefresh方法在刷新成功后会调用resetNoMoreData方法,除非手动传入参数finishRefresh(false)但是这样用起来有点奇怪。

或者finishRefresh方法中加入noMoreData参数控制是否需要resetNoMoreData

作者:最开始设计的时候 finishRefresh 是不会重置noMoreData 的,需要自己调用 resetNoMoreData,但是后来很多用户反应,如果刷新成功 finishRefresh 应该具有重置功能,而不要用户去手动调用 resetNoMoreData。后来考虑许久决定给 finishRefresh 加上智能的判断,如果成功就重置。但是这样又和 resetNoMoreData 冲突。所以最后决定添加 finishRefreshWithNoMoreData 接口来弥补。所以 smart 建议用户刷新的时候 使用 finishRefresh 来重置或者 finishRefreshWithNoMoreData 来开启 NoMoreData。由于Smart 的内容识别功能 要求 delay 必须存在,不能去掉。

tianminggh commented 5 years ago

希望可以添加结束刷新的功能,并且结束刷新之后可以马上启动刷新。大致的期望是如下代码可以正常工作:

autoRefresh();
finishRefresh();
autoRefresh();

目前的效果是:第二次刷新操作并不会执行。看了下代码可能是finishRefresh内部使用View.post()造成的。

作者回复:不管是 autoRefresh 还是 finishRefresh 都有一个动画过程,需要时间,不可能立即完成的,而且你这样的应用场景实在想不到什么情况会用到,像这样特别的功能你真的必要,建议自己重写SmartRefreshLayout 的子类来实现,作者是不会为了小众需求而去动整体设计的

我现在遇到的就是结束加载更多 立马调用刷新就不行,列表上面有个筛选 当在结束加载更多的时候就不能立马调用刷新,这逻辑是有问题的

typ0520 commented 5 years ago

作者是否考虑过把这个库迁移到flutter平台上

biyunhuang commented 4 years ago

加载失败后,”加载失败,点击重试“常驻底部,点击文案后重新loadMore。产品需求,呜呜呜,可否支持,或者是否已有功能可以支持

4332weizi commented 4 years ago

setLoadmoreFinishedfinishLoadmore方法的命名有迷惑性,建议更换。

作者:setLoadmoreFinished 两年前都已经删除了,你还在用?

4332weizi commented 4 years ago

不好意思,项目里面用的老版本,我刚发现。已升级,多谢!

b228389203 commented 4 years ago

仿淘宝二楼的设计是否包含有二楼高度非全屏的情况吗,如果没有的话,是否考虑添加

typ0520 commented 4 years ago

public static String REFRESH_FOOTER_PULLUP = "上拉加载更多"; public static String REFRESH_FOOTER_RELEASE = "释放立即加载"; public static String REFRESH_FOOTER_LOADING = "正在加载..."; public static String REFRESH_FOOTER_REFRESHING = "正在刷新..."; public static String REFRESH_FOOTER_FINISH = "加载完成"; public static String REFRESH_FOOTER_FAILED = "加载失败"; public static String REFRESH_FOOTER_ALLLOADED = "没有更多数据了";

建议支持下英文

gaohomway commented 4 years ago

阅读了源码,作者很强大,多年的维护辛苦啦! 项目没有其他需求,下拉刷新使用的最简单的模式,连文字都没有,只有两个图标。

但使用起来还是有厚重感,看了主类大概有三千行左右的代码,想问作者还有精减的空间嘛

yuexunshi commented 4 years ago

希望能加上上拉加载更多的时候,如果没有更多数据了,就一直显示加载的布局,并且显示没有更多了,这样的功能真的是非常常见,非常刚需的,依靠其他的baseadapter库去实现很烦人的,而在这个库里面应该实现起来要简单的多,谢谢,辛苦了

作者回复:该功能已经有了,请不要提出已有功能

refreshLayout.setLoadmoreFinish(true); //V1.0.0(1.0.5 删除)
or
refreshLayout.setNoMoreData(true);//V1.0.5
or
refreshLayout.finishLoadmoreWithNoMoreData();//V1.0.4
or
refreshLayout.finishLoadMoreWithNoMoreData();//V1.1.0

默认的footer。自己没有设置。但是加载完成,设置了这几个属性,还是没有(没有更多数据)的提示。依然能上拉加载。现在有这个功能吗?没数据下面固定显示没有更多数据了。

dengpan20 commented 4 years ago

直接开说了,我看了半天没发现有这样的一个功能,header 可以默认展开一定的布局(场景留出header 的位置,同时可以下拉加载更多这种(目的:下拉刷新起点在顶部,但是回到刷新完成的状态是内容区域在title布局下面))表达不是很清楚。

KunMinX commented 4 years ago

一直在用 SRL,有充分的回调参数,十分方便。 只是,越界回弹的动画效果,能不能照搬 yalantis 的 taurus 的呢? 目前 SRL 默认的回弹效果 特别生硬。taurus 是我找到的最像 iOS、使用感受最好的一个了。

所以想打听一下,后续会不会有呢?

CodingCodersCode commented 4 years ago

有两点: 一:建议提供通过【java代码】【动态】【绑定 and 解绑】【srlFixHeaderViewId】和【srlFixFooterViewId】的方法。

虽然可以通过ids.xml与xml预先绑定能够解决,但感觉有点怪怪的,没有通过java代码动态绑定的舒服

二:感觉既是建议也是一个bug,或者说是一个改进点比较恰当,个人比较疑惑,所以就在这里提出了

主要涉及方法: (1)public RefreshLayout setRefreshContent(@NonNull View content) (2)public RefreshLayout setRefreshContent(@NonNull View content, int width, int height)

这个是个人用于实现上面第一点时发现的,虽然可以实现,但是只能调用一次,否则会出bug,看代码发现,每调用一次,就嵌套层级加深至少一次,而且更改了原有布局xml的结构及children集合。

建议换一种方式实现fix效果,并且不改变layuot xml结构,也不会因上述两个方法逐次加深嵌套层级。

JunhuaLin commented 4 years ago

建议在RefreshInternal#onMoving(boolean isDragging, float percent, int offset, int height, int maxDragHeight)方法上添加一个参数(或者其他能区分的方式)用于区分这两种情况:a.用户拖动触发刷新,b.autoRefresh等方法触发刷新。

目的在于实现不同的刷新效果:a.实现平移布局展示(有交互感) b.透明度变化展示效果(无需交互)

效果类似于,SwipeRefreshLayout用户推动是平移效果,调用setRefreshing(true)是渐变放大的效果

--------------------------------- PR分割线 ----------------------------------------

实现效果如下(PR提交代码实现的效果,不包括MaterialHeader的改动): 第一次刷新:手动拖拽触发刷新效果。 第二次刷新:调用autoRefresh触发的刷新效果。

注:两种效果可以通过刷新头部控件的开关控制

uaudk-3wrq0

JunhuaLin commented 4 years ago

SmartRefreshLayout升级v2.0了,横向扩展没有一起升级,一块处理下吧!手动点赞

M45ter commented 4 years ago

header或者footer能否考虑增加用lottie实现动画的方式,这样更换起来就更简单了😄

JunhuaLin commented 4 years ago

header或者footer能否考虑增加用lottie实现动画的方式,这样更换起来就更简单了😄

直接自定义header或footer 里面用上lottie就好了呀

lk4403 commented 4 years ago

现在header, footer只能设置纯色,能否支持渐变背景?

huangzhuhua666 commented 4 years ago

MaterialHeader建议可以根据下拉距离实现渐变颜色

stevenwsg commented 4 years ago

请增加可定制的下来刷新功能:根据下拉高度,决定头部gif当前的帧数。 比如,一个圆形进度条,根据下拉高度,显示进度条的百分比。 我可能说的不是很清楚,表达能力有限,这种效果很多应用都有,比如YY的下拉刷新效果。

作者回复:自定义 Header 功能已经有了哈,请不要提出已有功能!

想问一下大佬,这个在那个header里面

stevenwsg commented 4 years ago

请增加可定制的下来刷新功能:根据下拉高度,决定头部gif当前的帧数。 比如,一个圆形进度条,根据下拉高度,显示进度条的百分比。 我可能说的不是很清楚,表达能力有限,这种效果很多应用都有,比如YY的下拉刷新效果。

作者回复:自定义 Header 功能已经有了哈,请不要提出已有功能!

想问一下大佬,这个在那个header里面

大佬好,已解决谢谢~~~

developerzjy commented 4 years ago

在下拉刷新状态下,列表内容可以滑动,但是header不能跟随滑动,这种情况比较符合逻辑,请考虑。谢谢

作者回复:你说的这个逻辑是老式的刷新啦,效果看起来死板,现在的刷新都是Header跟随列表一起滚动的,github 上多个有名的 刷新库都是这样的。本建议不会被采纳。

我觉得“下拉刷新状态下,列表内容可以滑动,但是header不能跟随滑动”是更加合理的,如果跟随列表滑动,那么滑动过程用户不知道什么时候加载完成了,这时候数据返回更新列表的话,可能会有问题,我的建议:添加开关配置header是否跟随滑动,如果跟随滑动,可以再添加一个配置,滑动后是否取消本次刷新回调

Archer-cat commented 3 years ago

大佬 上拉预加载 功能有吗? (当前页总数10 第一个开始上拉可以到据到底部item 还有几个的时候提前无感加载 )

JunhuaLin commented 3 years ago

希望可以添加结束刷新的功能,并且结束刷新之后可以马上启动刷新。大致的期望是如下代码可以正常工作:

autoRefresh();
finishRefresh();
autoRefresh();

目前的效果是:第二次刷新操作并不会执行。看了下代码可能是finishRefresh内部使用View.post()造成的。

作者回复:不管是 autoRefresh 还是 finishRefresh 都有一个动画过程,需要时间,不可能立即完成的,而且你这样的应用场景实在想不到什么情况会用到,像这样特别的功能你真的必要,建议自己重写SmartRefreshLayout 的子类来实现,作者是不会为了小众需求而去动整体设计的

我现在遇到的就是结束加载更多 立马调用刷新就不行,列表上面有个筛选 当在结束加载更多的时候就不能立马调用刷新,这逻辑是有问题的

希望可以添加结束刷新的功能,并且结束刷新之后可以马上启动刷新。大致的期望是如下代码可以正常工作:

autoRefresh();
finishRefresh();
autoRefresh();

目前的效果是:第二次刷新操作并不会执行。看了下代码可能是finishRefresh内部使用View.post()造成的。

作者回复:不管是 autoRefresh 还是 finishRefresh 都有一个动画过程,需要时间,不可能立即完成的,而且你这样的应用场景实在想不到什么情况会用到,像这样特别的功能你真的必要,建议自己重写SmartRefreshLayout 的子类来实现,作者是不会为了小众需求而去动整体设计的

autoRefresh(); finishRefresh(0); autoRefresh(); 这样试一试

fanyafeng commented 3 years ago

我这里为了实现多点的下拉功能,不仅重新定制了一个header,还把作者刷新布局的源码改了,才实现了这个效果,但是也不是完全的相似,作者可以把这个功能加进去,看了下盒马和七鲜貌似都有类似的功能

https://user-images.githubusercontent.com/25732455/112793855-95f19b80-9098-11eb-8233-2365ff861674.mp4

https://user-images.githubusercontent.com/25732455/112793936-b4579700-9098-11eb-8250-b34dbbc72ebd.mp4

Rob8it commented 2 years ago

通过setHeaderHeight和setHeaderTriggerRate设置刷新头高度为整屏-模拟可无限下拉时,释放刷新后到Refreshing状态时,会有一个回弹动画ValueAnimator animator = mKernel.animSpinner(mHeaderHeight),这里能否自定义Refreshing状态的动画位置高度或这个高度=触发下拉刷新的距离HeaderHeight*HeaderTriggerRate,不然看着很不合理