Giter Site home page Giter Site logo

scwang90 / smartrefreshlayout Goto Github PK

View Code? Open in Web Editor NEW
24.7K 516.0 4.9K 267.24 MB

🔥下拉刷新、上拉加载、二级刷新、淘宝二楼、RefreshLayout、OverScroll,Android智能下拉刷新框架,支持越界回弹、越界拖动,具有极强的扩展性,集成了几十种炫酷的Header和 Footer。

Home Page: https://segmentfault.com/a/1190000010066071

License: Apache License 2.0

Java 99.70% Batchfile 0.30%
refreshlayout overscroll pull-to-refresh pulltorefresh android android-ui header footer

smartrefreshlayout's Introduction

Android智能下拉刷新框架-SmartRefreshLayout

License Arsenal Maven MinSdk Methods

English | 中文

SmartRefreshLayout以打造一个强大,稳定,成熟的下拉刷新框架为目标,并集成各种的炫酷、多样、实用、美观的Header和Footer。 正如名字所说,SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构。 它继承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout, 其他第三方的 Ultra-Pull-To-RefreshTwinklingRefreshLayout 。 还集成了各种炫酷的 Header 和 Footer。

IOS版本

IOS版本:链接

国内加速

github 由于你懂的原因,下载速度缓慢,图片也无法查看,可以跳转 国内镜像

特点功能:

  • 支持多点触摸
  • 支持淘宝二楼和二级刷新
  • 支持嵌套多层的视图结构 Layout (LinearLayout,FrameLayout...)
  • 支持所有的 View(AbsListView、RecyclerView、WebView....View)
  • 支持自定义并且已经集成了很多炫酷的 Header 和 Footer.
  • 支持和 ListView 的无缝同步滚动 和 CoordinatorLayout 的嵌套滚动 .
  • 支持自动刷新、自动上拉加载(自动检测列表惯性滚动到底部,而不用手动上拉).
  • 支持自定义回弹动画的插值器,实现各种炫酷的动画效果.
  • 支持设置主题来适配任何场景的 App,不会出现炫酷但很尴尬的情况.
  • 支持设多种滑动方式:平移、拉伸、背后固定、顶层固定、全屏
  • 支持所有可滚动视图的越界回弹
  • 支持 Header 和 Footer 交换混用
  • 支持 AndroidX
  • 支持横向刷新
  • 支持IOS

传送门

Demo

下载 APK-Demo

项目演示

个人首页 微博列表
餐饮美食 个人中心

样式演示 Style

Delivery DropBox
Refresh-your-delivery Dropbox-Refresh

上面这两个是我自己实现的,下面的是我把github上其它优秀的Header进行的整理和集合还有优化:

BezierRadar BezierCircle
Pull To Refresh Pull Down To Refresh
FlyRefresh Classics
FlyRefresh ClassicsHeader
Phoenix Taurus
Yalantis/Phoenix Yalantis/Taurus
BattleCity HitBlock
FunGame/BattleCity FunGame/HitBlock
WaveSwipe Material
WaveSwipeRefreshLayout MaterialHeader
StoreHouse WaterDrop
CRefreshLayout WaterDrop

看到这么多炫酷的Header,是不是觉得很棒?这时你或许会担心这么多的Header集成在一起,但是平时只会用到一个,是不是要引入很多无用的代码和资源? V2.x 版本已经把依赖库拆分成8个包啦,用到的时候自行引用就可以啦!

  • refresh-layout-kernel 核心必须依赖
  • refresh-header-classics 经典刷新头
  • refresh-header-radar 雷达刷新头
  • refresh-header-falsify 虚拟刷新头
  • refresh-header-material 谷歌刷新头
  • refresh-header-two-level 二级刷新头
  • refresh-footer-ball 球脉冲加载
  • refresh-footer-classics 经典加载

简单用例

1.在 build.gradle 中添加依赖

implementation 'androidx.appcompat:appcompat:1.0.0'                 //必须 1.0.0 以上

implementation  'io.github.scwang90:refresh-layout-kernel:2.1.0'      //核心必须依赖
implementation  'io.github.scwang90:refresh-header-classics:2.1.0'    //经典刷新头
implementation  'io.github.scwang90:refresh-header-radar:2.1.0'       //雷达刷新头
implementation  'io.github.scwang90:refresh-header-falsify:2.1.0'     //虚拟刷新头
implementation  'io.github.scwang90:refresh-header-material:2.1.0'    //谷歌刷新头
implementation  'io.github.scwang90:refresh-header-two-level:2.1.0'   //二级刷新头
implementation  'io.github.scwang90:refresh-footer-ball:2.1.0'        //球脉冲加载
implementation  'io.github.scwang90:refresh-footer-classics:2.1.0'    //经典加载

如果使用 AndroidX 先在 gradle.properties 中添加,两行都不能少噢~

android.useAndroidX=true
android.enableJetifier=true

2.在XML布局文件中添加 SmartRefreshLayout

<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smart.refresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.scwang.smart.refresh.header.ClassicsHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never"
        android:background="#fff" />
    <com.scwang.smart.refresh.footer.ClassicsFooter
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</com.scwang.smart.refresh.layout.SmartRefreshLayout>

3.在 Activity 或者 Fragment 中添加代码

RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
refreshLayout.setRefreshHeader(new ClassicsHeader(this));
refreshLayout.setRefreshFooter(new ClassicsFooter(this));
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
    @Override
    public void onRefresh(RefreshLayout refreshlayout) {
        refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
    }
});
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
    @Override
    public void onLoadMore(RefreshLayout refreshlayout) {
        refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败
    }
});

使用指定的 Header 和 Footer

1.方法一 全局设置

public class App extends Application {
    //static 代码段可以防止内存泄露
    static {
        //设置全局的Header构建器
        SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
                @Override
                public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
                    layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色
                    return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header
                }
            });
        //设置全局的Footer构建器
        SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
                @Override
                public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
                    //指定为经典Footer,默认是 BallPulseFooter
                    return new ClassicsFooter(context).setDrawableSize(20);
                }
            });
    }
}

注意:方法一 设置的Header和Footer的优先级是最低的,如果同时还使用了方法二、三,将会被其它方法取代

2.方法二 XML布局文件指定

<com.scwang.smart.refresh.layout.SmartRefreshLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#444444"
    app:srlPrimaryColor="#444444"
    app:srlAccentColor="@android:color/white"
    app:srlEnablePreviewInEditMode="true">
    <!--srlAccentColor srlPrimaryColor 将会改变 Header 和 Footer 的主题颜色-->
    <!--srlEnablePreviewInEditMode 可以开启和关闭预览功能-->
    <com.scwang.smart.refresh.header.ClassicsHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="@dimen/dimenPaddingCommon"
        android:background="@android:color/white"
        android:text="@string/description_define_in_xml"/>
    <com.scwang.smart.refresh.footer.ClassicsFooter
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</com.scwang.smart.refresh.layout.SmartRefreshLayout>

注意:方法二 XML设置的Header和Footer的优先级是中等的,会被方法三覆盖。而且使用本方法的时候,Android Studio 会有预览效果,如下图:

不过不用担心,只是预览效果,运行的时候只有下拉才会出现~

3.方法三 Java代码设置

final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
//设置 Header 为 贝塞尔雷达 样式
refreshLayout.setRefreshHeader(new BezierRadarHeader(this).setEnableHorizontalDrag(true));
//设置 Footer 为 球脉冲 样式
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));

4.更多使用说明

混淆

SmartRefreshLayout 不需要添加混淆过滤代码,并且已经混淆测试通过,如果你在项目的使用中混淆之后出现问题,请及时通知我。

赞赏

如果你喜欢 SmartRefreshLayout 的设计,感觉 SmartRefreshLayout 帮助到了你,可以点右上角 "Star" 支持一下 谢谢! ^_^ 你也还可以扫描下面的二维码~ 请作者喝一杯咖啡。

如果希望捐赠之后能获得相关的帮助,可以选择加入下面的付费群来取代普通捐赠,付费群可以直接获得作者的直接帮助,与问题反馈。

如果在捐赠留言中备注名称,将会被记录到列表中~ 如果你也是github开源作者,捐赠时可以留下github项目地址或者个人主页地址,链接将会被添加到列表中起到互相推广的作用 捐赠列表

友情链接

github/afKT/DevUtils
github/Loror
github/faith-hb/WidgetCase
github/Bamboy120315/Freedom
github/Tencent/APIJSON
github/dengyuhan
github/zrp2017
github/fly803/BaseProject
github/razerdp
github/SuperChenC/s-mvp
github/KingJA/LoadSir
github/jianshijiuyou
github/zxy198717
github/addappcn
github/RainliFu
github/sugarya
github/stormzhang

讨论

QQ解决群 - 602537182 (付费)

进群须知

自开群以来,还是有很多的朋友提出了很多问题,我也解决了很多问题,其中有大半问题是本库的Bug导致,也有些是使用者项目本 身的环境问题,这花费了我大量的时间,经过我的观察和测试,到目前为止,本库的bug已经越来越少,当然不能说完全没有,但是 已经能满足很大部分项目的需求。所以从现在起,我做出一个决定:把之前的讨论群改成解决群,并开启付费入群功能,专为解决大 家在使用本库时遇到的问题,不管是本库bug还是,特殊的项目环境导致(包含项目本身的bug)。 我也有自己的工作和娱乐时间,只有大家理解和支持我,我才能专心的为大家解决问题。不过用担心,我已经建立了另一个可以免费 进入的QQ讨论群。

QQ讨论群 - 914275312 (新) 477963933 (满) 538979188 (满)

进群须知

这个群,免费进入,大家可以相互讨论本库的相关使用和出现的问题,群主也会在里面解决问题,如果提出的问题,群成员不能帮助 解决,需要群主解决,但是要花费群主五分钟以上的时间(本库Bug除外),群主将不会解决这个问题,如果项目紧急,请付费进入解 决群解决(不过注意,付费群中群主会很认真很努力的解决问题,但也不能保证已经能完美解决)或者转换使用其他的刷新库。

温馨提示

加入群的答案在本文档中可以找到~

其他作品

MultiWaveHeader
SmartRefreshHorizontal
诗和远方

感谢

SwipeRefreshLayout
Ultra-Pull-To-Refresh
TwinklingRefreshLayout
BeautifulRefreshLayout

License

Copyright 2017 scwang90

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

smartrefreshlayout's People

Contributors

chengzhijun0706 avatar firdausmaulan avatar gengjian avatar haoxiqiang avatar jamgudev avatar keenorchen avatar scwang90 avatar tommylemon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smartrefreshlayout's Issues

兼容ScrollableLayout

作者你好,麻烦您看下能不能兼容一下这个库https://github.com/cpoopc/ScrollableLayout
配合这个库使用的时候,会出现一种情况就是,当下拉出现刷新头部,此时手指不松开,然后上拉,会触发recyclerview的滑动,recyclerviewiew内容会滑上去,此时再下拉就会截掉一部分

NestLayout 滑动效果不是太流畅

<com.scwang.smartrefresh.layout.SmartRefreshLayout>
<com.scwang.smartrefresh.layout.header.ClassicsHeader>
<android.support.v4.widget.NestedScrollView>


<android.support.v7.widget.RecyclerView>

<android.support.v4.widget.NestedScrollView>
<com.scwang.smartrefresh.layout.footer.ClassicsFooter>
<com.scwang.smartrefresh.layout.SmartRefreshLayout>

我的布局大概是这个结构,滑动不是太流畅,无法快速滑动。能麻烦你看下吗?

App不能启动

demo下载后不能运行:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.scwang.refreshlayout/com.scwang.refreshlayout.activity.IndexMainActivity}: android.view.InflateException: Binary XML file line #17: Error inflating class com.scwang.smartrefresh.header.DeliveryHeader
                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2219)
                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
                                                     at android.app.ActivityThread.access$800(ActivityThread.java:135)
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                     at android.os.Looper.loop(Looper.java:136)
                                                     at android.app.ActivityThread.main(ActivityThread.java:5045)
                                                     at java.lang.reflect.Method.invokeNative(Native Method)
                                                     at java.lang.reflect.Method.invoke(Method.java:515)
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                                                     at dalvik.system.NativeStart.main(Native Method)
                                                  Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class com.scwang.smartrefresh.header.DeliveryHeader
                                                     at android.view.LayoutInflater.createView(LayoutInflater.java:620)
                                                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
                                                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
                                                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
                                                     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
                                                     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
                                                     at com.scwang.refreshlayout.fragment.RefreshStylesFragment.onCreateView(RefreshStylesFragment.java:80)
                                                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)
                                                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
                                                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
                                                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
                                                     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
                                                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
                                                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
                                                     at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
                                                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
                                                     at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
                                                     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607)
                                                     at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
                                                     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1188)
                                                     at android.app.Activity.performStart(Activity.java:5241)
                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2179)
                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269) 
                                                     at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                                                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                     at android.os.Looper.loop(Looper.java:136) 
                                                     at android.app.ActivityThread.main(ActivityThread.java:5045) 
                                                     at java.lang.reflect.Method.invokeNative(Native Method) 
                                                     at java.lang.reflect.Method.invoke(Method.java:515) 
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                                                     at dalvik.system.NativeStart.main(Native Method) 
                                                  Caused by: java.lang.reflect.InvocationTargetException
                                                     at java.lang.reflect.Constructor.constructNative(Native Method)
                                                     at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
                                                     at android.view.LayoutInflater.createView(LayoutInflater.java:594)
                                                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
                                                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
                                                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
                                                     at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                                                     at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                                                     at com.scwang.refreshlayout.fragment.RefreshStylesFragment.onCreateView(RefreshStylesFragment.java:80) 
                                                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192) 
                                                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 
                                                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
                                                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
                                                     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758) 
                                                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) 
                                                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 
                                                     at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 
                                                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013) 
                                                     at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) 
                                                     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607) 
                                                     at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178) 
                                                     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1188) 
                                                     at android.app.Activity.performStart(Activity.java:5241) 
                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2179) 
                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269) 
                                                     at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                                                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                     at android.os.Looper.loop(Looper.java:136) 
                                                     at android.app.ActivityThread.main(ActivityThread.java:5045) 
                                                     at java.lang.reflect.Method.invokeNative(Native Method) 
                                                     at java.lang.reflect.Method.invoke(Method.java:515) 
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                                                     at dalvik.system.NativeStart.main(Native Method) 
                                                  Caused by: java.lang.NoSuchMethodError: android.view.View.<init>
                                                     at com.scwang.smartrefresh.header.DeliveryHeader.<init>(DeliveryHeader.java:59)
                                                     at com.scwang.smartrefresh.header.DeliveryHeader.<init>(DeliveryHeader.java:54)
                                                     at com.scwang.smartrefresh.header.DeliveryHeader.<init>(DeliveryHeader.java:50)
                                                     at java.lang.reflect.Constructor.constructNative(Native Method) 
                                                     at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
                                                     at android.view.LayoutInflater.createView(LayoutInflater.java:594) 
                                                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
                                                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
                                                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
                                                     at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                                                     at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                                                     at com.scwang.refreshlayout.fragment.RefreshStylesFragment.onCreateView(RefreshStylesFragment.java:80) 
                                                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192) 
                                                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 
                                                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
                                                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
                                                     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758) 
                                                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) 
                                                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 
                                                     at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 
                                                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013) 
                                                     at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) 
                                                     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607) 
                                                     at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178) 
                                                     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1188) 
                                                     at android.app.Activity.performStart(Activity.java:5241) 
                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2179) 
                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269) 
                                                     at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                                                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                     at android.os.Looper.loop(Looper.java:136) 
                                                     at android.app.ActivityThread.main(ActivityThread.java:5045) 
                                                     at java.lang.reflect.Method.invokeNative(Native Method) 
                                                     at java.lang.reflect.Method.invoke(Method.java:515) 
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                                                     at dalvik.system.NativeStart.main(Native Method) 

经典风格-时间显示

经典风格的那个header刷新显示的时间不对,时间戳转换的时候是不是应该区分一下时区?

上拉加载无法触发?

从 TwinklingRefreshLayout过来的,发现确实借鉴了很多 TwinklingRefreshLayout的东西,不过我为什么滑到底也无法触发上拉加载事件?难道需要设置什么特殊属性?

越界问题

java.lang.ArrayIndexOutOfBoundsException: length=14; index=-1
at com.scwang.refreshlayout.fragment.RefreshStylesFragment.onItemClick(RefreshStylesFragment.java:149)
at com.scwang.refreshlayout.adapter.SmartViewHolder.onClick(SmartViewHolder.java:42)

最后一次刷新的时间不更新

在build.gradle中引用了这个库,刷新的时候最后一次刷新时间不更新了!我以为是我的问题,直接把demo的布局跟代码拷贝过来也是一样

版本是否发布正确?

Failed to resolve: Could not resolve com.scwang.smartrefresh:SmartRefreshLayout:1.0.2-alpha-3. Required by: project :app Open File

上拉加载更多的几种模式

1.上拉到底部并且要拉动一段距离才触发加载
2.上拉到内容的最后一个条目时自动触发加载更多
3.上拉到倒数第n个条目时自动加载更多
第1类可以设置触发距离,第2类最后一个条目可以是内容的最后一个也可以是本控价的正在加载条目
第3类可以设置触发加载的倒数条目数还是滚动条滚动到达的比例
上面三类各有优点适用于不同的场景。

示例Basic列表下拉抖动

重现:
示例Basic列表,在有数据的情况下。先稍微向下滚动,使可见的数据第一条为“第02条数据”之后的数据,再往回滚,“第01条数据”到“第00条数据”之间会有一个抖动跳跃。

apk的实战里面 微博按钮点击崩溃,原因如下,建议修改

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag vector

 at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                                                                        at dalvik.system.NativeStart.main(Native Method) 
                                                                     Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_feed_list_mail.xml from drawable resource ID #0x7f020062

一点小建议

几天前关注到这个项目的时候,发现虽然效果不错,但是刷新时列表不能操作,就没太放心上。但是才几天过去,作者就优化掉这个问题了,点赞!
个人提点体验上的建议:
1.刷新时,刷新中这个状态,现在只能向上回退滚动,而不能继续向下拉然后回弹回刷新中的位置。若能像qq一样能刷新中继续下拉回弹就更赞了.
2.加载更多,当没有更多数据时,只有快速滚动时的回弹,而不能继续上拉。
3.加载更多,没有更多数据时,一般的产品会在末项追加一条“没有更多数据”这种footer。目前好像Refreshfooter收回了,只有在列表多加一种viewtype才能实现,若能直接让Refreshfooter不收回,显示这个状态就更棒了.

English Readme

Please translate your Readme in English,
Your lib is pretty, this will help user to download and use it ;)

体验问题

下载demo体验了下,有点体验不好的是,经典风格正在刷新时列表还可往上滚一点点,等刷新结束列表顶部那点也还是被隐藏了。另外下拉的时候有时候会卡死一会,刷新中ui完全不见了,只有等刷新成功ui才恢复正常。

Demo apk.

Process: com.scwang.refreshlayout, PID: 4879
                                             java.lang.NullPointerException: Attempt to invoke interface method 'com.scwang.smartrefresh.layout.api.RefreshLayout com.scwang.smartrefresh.layout.api.RefreshLayout.setEnableRefresh(boolean)' on a null object reference
                                                 at com.scwang.smartrefresh.header.FlyRefreshHeader$3.onAnimationEnd(FlyRefreshHeader.java:251)
                                                 at android.animation.AnimatorSet$AnimatorSetListener.onAnimationEnd(AnimatorSet.java:854)
                                                 at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1171)
                                                 at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:722)
                                                 at android.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:738)
                                                 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:800)
                                                 at android.view.Choreographer.doCallbacks(Choreographer.java:603)
                                                 at android.view.Choreographer.doFrame(Choreographer.java:571)
                                                 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:786)
                                                 at android.os.Handler.handleCallback(Handler.java:815)
                                                 at android.os.Handler.dispatchMessage(Handler.java:104)
                                                 at android.os.Looper.loop(Looper.java:194)
                                                 at android.app.ActivityThread.main(ActivityThread.java:5654)
                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                 at java.lang.reflect.Method.invoke(Method.java:372)
                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1082)
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:848)

混淆

有没有混淆的方案

v-layout对Recyclerview进行处理后功能基本失效

使用v-layout对Recyclerview进行处理,使用这个框架基本就不行了,下拉需要拉很长的距离,上拉失效.我以为是我处理的问题,没办法尝试TwinklingRefreshLayout就没问题了.........这算不算是个bug

刷新完成回弹时间

刷新完成后往往需要停留一下,再回弹回去,可否加个设置刷新成功后回弹时间的参数

关于数据全部加载完毕

设置全部加载完毕,调用如下代码
refreshlayout.setLoadmoreFinished(true);

两种情况:
页面静止状态,并且继续上拉布局不能上拉
页面快速拖动,到底部会出现 “全部加载完毕” 的Footer

我在想 能不能将这两种情况合并,匀速滑动与快递滑动保持一致

Gradle failed

Error:Unable to load class 'org.gradle.internal.logging.LoggingManagerInternal'.
Possible causes for this unexpected error include:

Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.
In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

setOnLoadmoreListener出错为什么

refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() { @Override public void onLoadmore(SmartRefreshLayout refreshlayout) { refreshlayout.finishLoadmore(2000); } });
提示OnLoadmoreListener方法不是抽象的

使用模块部分崩溃

给的demo apk 使用模块, DefaultCenter XMLDefine CodeDfine三个条目进入完成正在加载更多,就崩溃。
测试手机,乐视1s, android 6.0

自动加载更多的问题

现有的效果是滑动到底部触发加载更多(显示加载更多 footer)。
然后我有一个比较无理取闹的想法,能不能做到即将到底部(剩余未加载 item 数量 或者 剩余可滑动距离),然后回调加载更多(不显示加载更多 footer)?
例如:
前提,启用 RefreshHeader 且 关闭 RefreshFooter(关闭显示效果,不关闭回调)。
场景,一共有100条数据,每次加载20条数据,现在我滑动显示到第15条,这时候去回调加载更多,加载接下来的21-40条数据。

上拉加载更多,能不能添加一个没有更多的回调

很多时候,上拉加载更多已经拉取完了所有的服务器数据,我们需要给用户一个提示:
表示 “数据加载完毕”
或者 “我们是有底限的←_←“
但是我现在找不到这样的功能,是框架没有这个功能,还是我没有找到>﹏<

崩溃错误 java.lang.NoSuchMethodError: No static method lambda$static$1

FATAL EXCEPTION: main
                                                                             Process: com.buglee.lee.timelinenote, PID: 15368
                                                                             Theme: themes:{default=overlay:com.zui.theme.XuiSkin.pink, iconPack:com.zui.theme.XuiSkin.pink}
                                                                             java.lang.NoSuchMethodError: No static method lambda$static$1(Landroid/content/Context;Lcom/scwang/smartrefresh/layout/api/RefreshLayout;)Lcom/scwang/smartrefresh/layout/api/RefreshHeader; in class Lcom/scwang/smartrefresh/layout/SmartRefreshLayout; 
                                                                                 at com.scwang.smartrefresh.layout.SmartRefreshLayout$$Lambda$15.createRefreshHeader(Unknown Source)
                                                                                 at com.scwang.smartrefresh.layout.SmartRefreshLayout.onAttachedToWindow(SmartRefreshLayout.java:383)

上拉加载完成抖动

楼主上拉加载做个挺好,不过有的地方我觉得还是可以改进 。

我发现上拉加载完成之后,做了个view的移动操作,我知道楼主是想让新数据露出来一个。但是这样就有个问题了,正在加载的过程中往回滑的话,会跳动。

刷新体验

经典刷新 : 正在刷新状态,往上滑动,header能否设置也随着滚动上去,而不是固定?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.