下拉刷新的PinnedSection(悬停区域)列表

本文介绍如何在Android中实现带有悬浮标题的ListView,并集成了下拉刷新功能。通过修改PullToRefreshListView类并结合PinnedSectionListView,实现了兼容Android的悬浮标题效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前不久注意到iOS上面的ListView都是自带悬停小标题的功能,希望在Android上面也可以实现,但是发现现有的下拉刷新框架没有这方面的实现,因此自己尝试着添加进去。

这里面的PinnedSectionListView类是修改从网络上下载的非常优秀的代码而来的。
原始github地址为:https://github.com/beworker/pinned-section-listview

我这里也实现了将它们有机的融合在一起的功能,但是由于原始框架的上拉加载动画的问题,我们没有相应的上拉加载动画。
悬停的样式
两个section挤到一块
下拉刷新的样子


那么这个是怎么实现的呢?

  1. 复制PullToRefreshListView类,重命名为PullToRefreshPinnedSectionListView,这是我们将要修改的类;
  2. 添加静态公共变量,ITEM和SECTION,用于标识是section还是普通的item;
/** 是普通的item */
public static final int ITEM = 0;
/** pinned的视图 */
public static final int SECTION = 1;

3.改变其中的createListView这个方法,让它返回我们的类PullToRefreshPinnedSectionListView;

protected PinnedSectionListView createListView(Context context, AttributeSet attrs) {
    final PinnedSectionListView lv;
    if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) {
        lv = new InternalPinnedListViewSDK9(context, attrs);
    } else {
        lv = new PinnedSectionListView(context, attrs);
    }
    return lv;
}

4.现在问题来了,我们需要模仿原始的PullToRefreshListView中来写符合接口要求的类,因此我们也改写我们的PinnedSectionListView类,来符合要求,首先实现接口EmptyViewMethodAccessor
实现接口
主要是这两个方法:
需要实现的方法
5.仔细查看PullToRefreshListView源文件就会发现,它的InternalListView是内部类,可以很方便地实现addFooterView,而我们不是内部类,所以我将它定义为成员变量:
作为成员变量
6.这里的setFooterFramelayout方法就是PinnedSectionListView类中的公共方法
setFooterFramelayout公共方法
这个图中注释掉的方法也可以放在setAdapter中(至少写一次)
放在Adapter中
7.最后,在PullToRefreshPinnedSectionListView类中,修改InternalPinnedListViewSDK9继承PinnedSectionListView就可以了。


使用方法:

我们是在PullToRefreshPinnedListActivity类中使用的,为了保持良好的统一性,我在这个类中直接定义了静态Adapter,这个adapter只需要实现PinnedSectionListAdapter接口,并且重写getViewTypeCount和getItemViewType这两个方法就可以了。
定义Adapter
至此,我们就可以使用下拉刷新的悬浮ListView了。


对应的源码:http://download.youkuaiyun.com/detail/fengyangxiada/8919789

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值