尊重他人的劳动成果,转载请标明出处:http://blog.csdn.net/gengqiquan/article/details/53432804, 本文出自:【gengqiquan的博客】

之前写过一篇博文 如何写一个通用的列表控件讲到绝大多数项目总都会有各种形形色色的列表界面,但其实这些界面的区别就在于列表子项的布局不同和点击事件的响应不同而已,然而每次有个新的列表界面从适配器到Activity都需要写很多代码。作为一个懒人, 一直想把这些重复的工作给去掉,那篇博文提供了封装思路,许多伙伴要求能形成库方便大家使用。这几天得闲,就完成大家这个心愿
效果如图

默认提供一个SampleRefreshLayout。提供一些默认的样式
可以继承RefreshLayout抽象类实现自己的样式

完整的示例项目地址https://github.com/gengqiquan/RefreshLayout

使用

xml

    <com.gengqiquan.layout.SampleRefreshLayoutandroid:id="@+id/refresh"android:layout_width="match_parent"android:layout_height="match_parent"></com.gengqiquan.layout.SampleRefreshLayout>

activity初始化

     refresh = (SampleRefreshLayout) findViewById(R.id.refresh);//SampleRefreshLayout特有的方法需放在链式调用的前面refresh .noDataLable("暂时没有订单数据")//无数据文本.noDataImg(R.drawable.message_default)//无数据图片.pageCount(20)//分页数量.refreshEnable(true)//允许手动刷新.loadMoreEnable(true)//允许分页.showTopView(true)//显示一键回到顶部按钮.adapter(new SBAdapter<String>(this).layout(android.R.layout.simple_list_item_1)//item布局.bindViewData(new Converter<String>() {@Overridepublic void convert(Holder holder, String item) {//数据绑定holder.setText(android.R.id.text1, item);}}))//通用适配器.refresh(new RefreshListener() {//刷新回调@Overridepublic void onRefresh() {load(true);}}).loadMore(new LoadMoreListener() {//加载更多回调@Overridepublic void LoadMore() {load(false);}}).doRefresh();//主动调用刷新加载初始数据

lambda写法

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);refresh = (SampleRefreshLayout) findViewById(R.id.refresh);//SampleRefreshLayout特有的方法需放在链式调用的前面refresh .noDataLable("暂时没有订单数据").noDataImg(R.drawable.message_default).pageCount(20).refreshEnable(true).loadMoreEnable(true).showTopView(true).adapter(new SBAdapter<String>(this).layout(android.R.layout.simple_list_item_1).bindViewData(this::bindViewData)).refresh(()->load(true)).loadMore(()-> load(false)).doRefresh();}public void bindViewData(Holder holder, String item) {holder.setText(android.R.id.text1, item);}

load()请求

 private void load(final boolean isrefresh) {new Thread(new Runnable() {@Overridepublic void run() {Looper.prepare();try {if (isrefresh)Thread.sleep(2000);elseThread.sleep(500);} catch (Exception e) {}runOnUiThread(new Runnable() {@Overridepublic void run() {List<String> list = new ArrayList();for (int i = 0; i < 20; i++) {list.add("           " + i);}if (isrefresh)refresh.refreshComplete(list);elserefresh.loadMoreComplete(list);//请求失败调用 refresh.loadFailure();}});}}).start();}

继承RefreshLayout实现自己布局样式

 public class MyRefreshLayout extends RefreshLayout {//添加自定义加载更多界面public SampleRefreshLayout FooterLayout(FooterLayout layout) {mLoadMoreView = layout;return this;}//添加自定义无数据界面,需实现NoDataLayout接口@OverrideNoDataLayout onCreateNoDataView() {return new SimpleNoDataLayout(mContext);}
//添加自定义加载更多布局,需实现FooterLayout接口@OverrideFooterLayout onCreateLoadMoreView() {return mLoadMoreView;}
//添加自定义回到顶部按钮布局@OverrideView onCreateTopView() {return mTopView;}
//添加自定义请求失败布局@OverrideView onCreateFailureView() {return mFailureView;}public SampleRefreshLayout(Context context) {this(context, null);}public SampleRefreshLayout(Context context, AttributeSet attrs) {this(context, attrs, 0);}public SampleRefreshLayout(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);build();//记得这一句}

依赖添加

maven

<dependency><groupId>com.gengqiquan.refresh-layout</groupId><artifactId>layout</artifactId><version>1.0.1</version><type>pom</type>
</dependency>

gralde

compile 'com.gengqiquan.refresh-layout:layout:1.0.1'

lvy

<dependency org='com.gengqiquan.refresh-layout' name='layout' rev='1.0.1'><artifact name='layout' ext='pom' ></artifact>
</dependency>

请多多star

有什么建议的可以留言喔

如果我的博客对您有帮助,请留言鼓励下或者点个赞吧!

我建了一个QQ群(群号:121606151),用于大家讨论交流Android技术问题,有兴趣的可以加下,大家一起进步。

RefreshLayout让你半小时以内完成一个列表界面相关推荐

  1. 马云缺席的一个半小时,李彦宏和马化腾都聊了什么

     马云缺席的一个半小时,李彦宏和马化腾都聊了什么 搜狐IT 文/杨舒芳 今天上午,科技圈儿的一个大party,IT领袖峰会又嗨起来了.一个传统是,BAT大佬们同台对话,但是今年马云在北京玩着,所以 ...

  2. 互联网亿级日志实时分析平台,一个码农半小时就可以搞定,只因ELK

    一,前言 人们常常说数据如金,可是,能被利用起的数据,才是"金".而互联网的数据,常常以日志的媒介的形式存在,并需要从中提取其中的"数据". 从这些数据中,我们 ...

  3. java resume过时方法_面试官没想到,一个 Java 线程生命周期,我可以扯半小时

    面试官:你不是精通 Java 并发吗?从基础的 Java 线程生命周期开始讲讲吧. 好的,面试官.吧啦啦啦... 如果要说 Java 线程的生命周期的话,那我觉得就要先说说操作系统的线程生命周期 因为 ...

  4. 每天九点十分开始每半小时一次执行一个cron_每天通勤4小时!西咸双城生活的上班族,不简单...

    在西安,你每天上班路上花费多长时间? 大多数人的答案可能都在一个小时之间.然而,在西安,有一群辗转于西安和咸阳两座城市的上班族,他们平均每天早上六点出门,晚上八点回家,在公交.地铁.电动车.自行车等多 ...

  5. 感动要哭 撸了一个半小时的重载预算符高精

    撸了一个半小时代码,没玩守望(垃圾游戏毁我青春五个金牌都带不起队友)最后编译出312个错误.吓我,然而改了几个地方就直接过了直接过了直接过了,目前还是不明白ostream,istream的用处,上网才 ...

  6. 以前看过一个压缩过的.exe,运行会播放长达半小时的动画,却只有60KB,个人认为其中的原理...

    以前看过一个压缩过的.exe,运行会播放长达半小时的动画,而不重复,文件大小却只有60KB,个人认为其中的原理 1.主原理:该动画必是根据规则(即公式)生成的 2.启动时,根据公式,在内存生成数据表 ...

  7. 随机数抽奖程序 html,半小时撸一个抽奖程序

    需求总是很紧急,昨天正在开会收到人力需求,有时间做个抽奖吗?(now 下午四点12,年会五点开始.)还没能等我拒绝,人事又补了一句做不出来我们就不抽奖了,我擦瞬间感觉要是搞不出来会被兄弟们捅死的节奏, ...

  8. java抽奖程序头像_半小时撸一个抽奖程序

    需求总是很紧急,昨天正在开会收到人力需求,有时间做个抽奖吗?(now 下午四点12,年会五点开始.)还没能等我拒绝,人事又补了一句做不出来我们就不抽奖了,我擦瞬间感觉要是搞不出来会被兄弟们捅死的节奏, ...

  9. 能连续吃鸡6个半小时,这样的游戏手机想不想来一个?

    "N7是迄今为止最好的360手机."360手机N7新品发布会甫一开场,360手机总裁李开新就语惊四座. 作为360专门针对游戏手机市场推出的重头产品,360手机N7采用了高通骁龙6 ...

最新文章

  1. Hadoop Hive sql 语法详细解释
  2. 一文详解C++文件读写(FileStorage、txt)
  3. 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)...
  4. 【随记】SQL Server连接字符串参数说明
  5. vue.js建立主页的路由 - 另类的实现方式
  6. node.js 程序_如何不使用外部程序包创建Node.js Web应用程序
  7. ICCV2021 香港理工、阿里达摩院提出RealVSR:视频超分任务中的新数据集与损失方案...
  8. gradle 编译java配置文件_java – 如何在编译时使gradle使用正确的JDK?
  9. 对话框应用程序的DoModal()源代码
  10. 贪吃蛇html游戏代码
  11. 远程操作工具 Teamviewer
  12. github加速神器
  13. 【微机原理与接口技术】学习笔记5 I/O接口和并行接口芯片8255A
  14. 领导对你说这3句“小话”,表面关心,实则敲打,不改将被弃用
  15. pytorch repeat 使用详解
  16. linux中vim的全拼,linux常用命令全拼
  17. 中文维基百科的语料库下载和繁体转换为简体的操作
  18. 物理中的路程、速度、时间、加速度常用公式
  19. mount修改/dev/shm的大小
  20. 精益是什么?如何进行精益创新?

热门文章

  1. VR全景有什么应用,和传统摄影的区别,发展前景如何?
  2. 利用matlab求系统的单位阶跃响应,基于Matlab6_5的归一化二阶系统单位阶跃响应的模拟演示...
  3. Android 4.0 UI设计规范
  4. 基于服务器部署的OCR在线识别应用
  5. BFS解决一般性的泊松分酒问题
  6. shipyard中文版安装教程(附安装脚本)
  7. DELL r340服务器U盘安装Centos7
  8. RabbitMQ可视化界面登录不了,报错:Login failed
  9. 你是外包,麻烦不要偷吃零食。。。网友:...
  10. 睿瞳车牌识别测试总结