作者:常见问题
scwang90 opened this issue · 18 comments
本 Issue 仅限作者维护,其他人不要回复,这里不是提问的板块
- 常见问题文档版
//禁止上拉加载:
refreshLayout.setEnableLoadmore(false);
//使上拉加载具有弹性效果:
refreshLayout.setEnableAutoLoadmore(false);
//禁止越界拖动:
refreshLayout.setEnableOverScrollDrag(false);不能上拉加载更多?
尝试:
<SmartRefreshLayout
app:srlEnableLoadmore="true"
app:srlEnableLoadmoreWhenContentNotFull="true">
</SmartRefreshLayout>或者:
refreshlayout.setEnableLoadmore(true);
refreshlayout.setLoadmoreFinish(false);
refreshlayout.setEnableLoadmoreWhenContentNotFull(true);//内容不满屏幕的时候也开启加载更多如果还是不行请考虑使用列表的 Adapter 是否隐藏了某个item或者把某个item高度设置为0
如何修改刷新文字?
SmartRefresh的经典文字自带了国际化(中/英),如需自定义文字显示,可以通过以下两种方法设置:
代码设置(APP在运行是,更改系统语言,本方法无效)
ClassicsHeader 和 ClassicsFooter 的描述文字是可以修改的,不要看错成了常量哦~
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
ClassicsHeader.REFRESH_HEADER_PULLING = getString(R.string.header_pulling);//"下拉可以刷新";
ClassicsHeader.REFRESH_HEADER_REFRESHING = getString(R.string.header_refreshing);//"正在刷新...";
ClassicsHeader.REFRESH_HEADER_LOADING = getString(R.string.header_loading);//"正在加载...";
ClassicsHeader.REFRESH_HEADER_RELEASE = getString(R.string.header_release);//"释放立即刷新";
ClassicsHeader.REFRESH_HEADER_FINISH = getString(R.string.header_finish);//"刷新完成";
ClassicsHeader.REFRESH_HEADER_FAILED = getString(R.string.header_failed);//"刷新失败";
ClassicsHeader.REFRESH_HEADER_UPDATE = getString(R.string.header_update);//"上次更新 M-d HH:mm";
ClassicsHeader.REFRESH_HEADER_UPDATE = getString(R.string.header_update);//"'Last update' M-d HH:mm";
ClassicsHeader.REFRESH_HEADER_SECONDARY = getString(R.string.header_secondary);//"释放进入二楼"
ClassicsFooter.REFRESH_FOOTER_PULLING = getString(R.string.footer_pulling);//"上拉加载更多";
ClassicsFooter.REFRESH_FOOTER_RELEASE = getString(R.string.footer_release);//"释放立即加载";
ClassicsFooter.REFRESH_FOOTER_LOADING = getString(R.string.footer_loading);//"正在刷新...";
ClassicsFooter.REFRESH_FOOTER_REFRESHING = getString(R.string.footer_refreshing);//"正在加载...";
ClassicsFooter.REFRESH_FOOTER_FINISH = getString(R.string.footer_finish);//"加载完成";
ClassicsFooter.REFRESH_FOOTER_FAILED = getString(R.string.footer_failed);//"加载失败";
ClassicsFooter.REFRESH_FOOTER_NOTHING = getString(R.string.footer_nothing);//"全部加载完成";
}
}资源覆盖(1.1.0 以上版本)
<resources>
<string name="srl_header_pulling">下拉可以刷新</string>
<string name="srl_header_refreshing">正在刷新…</string>
<string name="srl_header_loading">正在加载…</string>
<string name="srl_header_release">释放立即刷新</string>
<string name="srl_header_finish">刷新完成</string>
<string name="srl_header_failed">刷新失败</string>
<string name="srl_header_update">上次更新 M-d HH:mm</string>
<string name="srl_header_secondary">释放进入二楼</string>
<string name="srl_footer_pulling">上拉加载更多</string>
<string name="srl_footer_release">释放立即加载</string>
<string name="srl_footer_loading">正在加载…</string>
<string name="srl_footer_refreshing">正在刷新…</string>
<string name="srl_footer_finish">加载完成</string>
<string name="srl_footer_failed">加载失败</string>
<string name="srl_footer_nothing">没有更多数据了</string>
</resources>XML直接指定(1.1.0 最新版)
<com.scwang.smartrefresh.layout.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srlTextPulling="@string/srl_header_pulling"
app:srlTextLoading="@string/srl_header_loading"
app:srlTextRelease="@string/srl_header_release"
app:srlTextFinish="@string/srl_header_finish"
app:srlTextFailed="@string/srl_header_failed"
app:srlTextUpdate="@string/srl_header_update"
app:srlTextSecondary="@string/srl_header_secondary"
app:srlTextRefreshing="@string/srl_header_refreshing"/>
<com.scwang.smartrefresh.layout.header.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srlTextPulling="@string/srl_footer_pulling"
app:srlTextRelease="@string/srl_footer_release"
app:srlTextLoading="@string/srl_footer_loading"
app:srlTextRefreshing="@string/srl_footer_refreshing"
app:srlTextFinish="@string/srl_footer_finish"
app:srlTextFailed="@string/srl_footer_failed"
app:srlTextNothing="@string/srl_footer_nothing"/>触发下拉刷新的距离
本库触发下拉刷新的距离就是 Header 的高度乘以比率:HeaderHeight*HeaderTriggerRate,下拉的距离超过这个值释放时就可以触发刷新事件,否则回弹到原始状态。
HeaderTriggerRate 默认是 1,改成0.5,那么再下拉到一半的时候就可以刷新了
改变这个距离就是 setHeaderHeight setHeaderHeightPx
footer 类推
相关方法
| name | format | description |
|---|---|---|
| setHeaderHeight | dimension | Header的标准高度(px/dp 两个版本) |
| setFooterHeight | dimension | Footer的标准高度(px/dp 两个版本) |
| setHeaderTriggerRate | float | Header触发刷新距离 与 HeaderHeight 的比率(默认1) |
| setFooterTriggerRate | float | Footer触发加载距离 与 FooterHeight 的比率(默认1) |
相关属性
| name | format | description |
|---|---|---|
| srlHeaderHeight | dimension | Header的标准高度(dp) |
| srlFooterHeight | dimension | Footer的标准高度(dp) |
| srlHeaderTriggerRate | float | Header触发刷新距离 与 HeaderHeight 的比率(默认1) |
| srlFooterTriggerRate | float | Footer触发加载距离 与 FooterHeight 的比率(默认1) |
显示没有更多数据,并不再触发加载更事件
//新版本
refreshlayout.finishLoadMoreWithNoMoreData();
//老版本
refreshlayout.finishLoadmore();
refreshlayout.setLoadmoreFinish(true);//1.0.4 及一下版本
refreshlayout.setNoMoreData(true);//1.0.5 以上加载更多一直显示?不能触发下拉刷新?
//尝试在 setLoadmoreFinish 之前加上 finishLoadmore
refreshlayout.finishLoadmore();
refreshlayout.setLoadmoreFinish(false);//1.0.4 及一下版本
refreshlayout.setNoMoreData(false);//1.0.5 以上自定义Header和Footer
全局设置 除Header,Footer 之外的基本参数?
public class App extends Application {
static {
SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
@NonNull
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
//开始设置全局的基本参数
layout.setReboundDuration(1000);
layout.setReboundInterpolator(new DropBounceInterpolator());
layout.setFooterHeight(100);
layout.setDisableContentWhenLoading(false);
//更多的 set 方法
return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Translate);
}
});
}
}没有上拉,快速滚动列表,Footer自己冒上来了?
这个功能是本刷新库的特色功能:在列表滚动到底部时自动加载更多。
如果不想要这个功能,是可以关闭的:
refreshlayout.setEnableAutoLoadmore(false);还没调用 finishRefresh ,刷新就自动结束了?
解决办法:setRefreshListener
refreshLayout.setRefreshListener(listener);实际项目中都会设置监听器的,所以不设置的都是demo,为了demo方便就默认3秒之后关闭了,如果一直不关闭,体验不好
AndroidStudio 不能预览
这个问题并不会影响运行效果,如果无法忍受预览失效
请加上
compile 'com.android.support:design:25.3.1'
获取当前状态?isRefreshing(),isLoading() 不见了?
版本的迭代,刷新的状态越来越多,仅仅由 isRefreshing(),isLoading() 已经无法满足要求,再1.0.5版本之后本库直接将 内部 State 开放出来,并标记 isRefreshing(),isLoading() 过期,鼓励大家使用 getState 来代替。getState 比 前两个方法更有用,具体参考下面代码。
refreshLayout.getState() == RefreshState.None //空闲状态
refreshLayout.getState() == RefreshState.Loading//代替 isLoading
refreshLayout.getState() == RefreshState.Refreshing//代替 isRefreshing
refreshLayout.getState().isDragging //判断是否正在拖拽刷新控件(非拖拽列表)
refreshLayout.getState().isFinishing //判断动画是否正在结束
refreshLayout.getState().isHeader //判断当前是否处于 Header 的一系列状态中
refreshLayout.getState().isFooter //判断当前是否处于 Footer 的一系列状态中
refreshLayout.getState().isOpening // 等同于 isLoading || isRefreshing不显示“加载完成”和“刷新完成”,直接因此 Header或者Footer。
Smart 可以修改 “加载完成”和“刷新完成” 的显示时间,所以想不现实它们,直接把显示时间设置为0即可。
header.setFinishDuration(0);//设置Footer 的 “刷新完成” 显示时间为0
footer.setFinishDuration(0);//设置Footer 的 “加载完成” 显示时间为0
与 RecyclerView,ListVIew,ScrollView,NestScrollView,滚动冲突
- 如果是 RecyclerView 和 NestScrollView 先尝试打开 Smart 的嵌套滚动功能
- 如果是 ListVIew,ScrollView,可以尝试 同时打开 ScrollView,ScrollView,Smart 的嵌套滚动功能
- 如果 1,2 都无效,这需要自定义滚动边界自己实现 canRefresh 和 canLoadmore,自己用代码告诉Smart 什么时候可以 刷新,什么时候可以加载
refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDeciderAdapter(){
@Override
public boolean canRefresh(View content) {
return /*自己实现是否可以刷新,通过返回 true false*///super.canRefresh(content);
}
});
多语言切换只能支持中英文?别的国家语言只能clone下来添加才能支持吗?
AndroidStudio 不能预览
这个问题并不会影响运行效果,如果无法忍受预览失效 请加上
compile 'com.android.support:design:25.3.1'
加上这个还是无法预览,求解决?只要使用了ConstraintLayout 基本都无法预览
