博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发 - 下拉刷新和分段头悬停列表
阅读量:5248 次
发布时间:2019-06-14

本文共 1959 字,大约阅读时间需要 6 分钟。

项目源码

本文所述项目已开源,

为什么做PullToRefresh-PinnedSection-ListView

前段时间因为项目需求,需要在Android中对ListView同时增加下拉刷新和分段头悬停的效果,受到的启发,Merge了两个Github上的开源项目:

  • (handmark版,目前已不再更新)

  • (目前版本为2.x)

    由于既有项目里的StickyListHeaders代码为1.x版本,StickyListHeadersListView继承自ListView,故与handmark版的PullToRefreshListView做merge时很顺畅;

    但2.x版的StickyListHeadersListView继承自FrameLayout,与PullToRefresh的融合并不顺利,若要整理拆分出一个独立的lib时遇到很多的问题,故在分断头悬停需求上采用了另一个类似的开源项目:

我是如何做的

前面已经介绍过这个过程是“很顺畅”的:

1.Library方面,基于PullToRefresh的Library修改,首先使其依赖StickyListHeaders的Library,通过拷贝src/com/handmark/pulltorefresh/library/PullToRefreshListView.java类,新建PullToRefreshPinnedSectionListView.java类;

2.修改PullToRefreshPinnedSectionListView类中createListView()方法,注释以下代码

 
[java]
 
  1. //        if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) {  
  2. //            lv = new InternalListViewSDK9(context, attrs);  
  3. //        } else {  
  4. //            lv = new InternalListView(context, attrs);  
  5. //        }  
 
 

添加

[java]
 
  1. lv = new PinnedSectionListView(context, attrs);  

3.Example方面,基于pinned-section-listview的example修改,令其依赖PullToRefresh的Library;

4.修改主类资源文件activity_main.xml,设置List组件为新类:

 
[html]
 
  1. <com.handmark.pulltorefresh.library.PullToRefreshPinnedSectionListView xmlns:android="http://schemas.android.com/apk/res/android"  
  2. android:id="@+id/list"  
  3. android:layout_width="match_parent"  
  4. android:layout_height="wrap_content"  
  5. android:headerDividersEnabled="false"  
  6. android:footerDividersEnabled="false"  
  7. android:divider="@null"  
  8. />  
 
 

5.改写SampleActivity.java类中getListView()方法:

 
[java]
 
  1. mpPullToRefreshPinnedSectionListView = (PullToRefreshPinnedSectionListView) findViewById(R.id.list);  
  2. return mpPullToRefreshPinnedSectionListView.getRefreshableView();  
 
 

即可通过

 
[java] 
 
  1. ListView list = getListView();  

 

继续进行原example其他操作,详情可阅读

另一种实现方式

本例的实现方式依赖于handmark版下拉刷新组件的灵活性,更重要的一点,要求分段头悬停组件是继承自ListView实现;故同理也可用handmark版下拉刷新组件和1.x版的StickyListHeaders组件实现;

另一种实现方式为,其采取合并的是2.x版的StickyListHeaders和johannilsson的android-pulltorefresh,实现形式不同,但效果类似,看过代码后实现起来也“相当顺畅”,有兴趣的同学可以参照此项目;

建议

建议在熟悉或使用过原有组件类库的前提下使用本类库。

转载于:https://www.cnblogs.com/exmyth/p/4501583.html

你可能感兴趣的文章
[导入]玫瑰丝巾!
查看>>
国内UED大全
查看>>
倒计时浏览器跳转JavaScript
查看>>
自动从网站上面下载文件 .NET把网站图片保存到本地
查看>>
【识记】 域名备案
查看>>
STL uva 11991
查看>>
MY SQL的下载和安装
查看>>
自定义OffMeshLink跳跃曲线
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
简述spring中常有的几种advice?
查看>>
[詹兴致矩阵论习题参考解答]习题6.8
查看>>
牛客网——华为机试(题21:简单密码)(Java)
查看>>
Inno setup 卸载时删除程序文件夹(文件)
查看>>
Python--一些基础内容
查看>>
Servlet服务器端编程之再体验
查看>>
【书摘】The Joshua tree epiphany
查看>>
Multiple Database Block Sizes and the Buffer Cache
查看>>
【读后感1】读《我是一只it小小鸟》有感
查看>>
Netty(2) - HelloWorld
查看>>
WCF初探-22:WCF中使用Message类(上)
查看>>