Android自定义ListView实现上滑分页

本文详细介绍了如何在Android中自定义ListView以实现上滑分页加载功能,包括底部View、PagerListView、Bean、Adapter的定义,以及列表视图子元素视图和MainActivity的设置方法。
摘要由CSDN通过智能技术生成

简介

Android系统支持的ListView只负责显示数据,不支持分页显示。而使其情况下列表需要展示的数据可能很多,如果一下子载全部加载完成,会导致效率的降低,甚至会导致内存溢出,因此我们必须实现分页功能。

功能

本文自定的listview支持列表滑到最后一条记录时加载下一页数据。

自定义ListView分页步骤

1 自定义PagerListView继承Android平台ListView,并实现OnScrollListener接口(此接口是列表视图滚动时的一个回调接口),重写或者实现响应的方法。
2 定义底部FView,xml或者代码中,也可以不需要
3 实现回调方法,在回调方法(onScroll)中记录最后一条记录位置和总条数,在回调方法(onScrollStateChanged)中判断是否滚动到最后一条记录,如果是则加载数据。
4 自定义数据加载接口,接受记录起始位置和每页记录数两个参数,此接口由使用者实现,由listview调用,以自动分页。

示例

示例中
AsyncNetRequest是自定义异步请求类,参见  Android异步请求处理实现机制
请求中URL为本地一个请求,可以是任何数据,此请求仅仅模拟远程请求,实际要展示的数据在请求成功后自动生成。

底部View定义

res/layout/pagerlistview_loadmore_footer.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- ListView底部加载更多按钮 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"  android:padding="10dp">
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/gray" />
    <!-- 正在加载 -->
    <RelativeLayout
        android:id="@+id/loader_loading"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="正在加载..."
            android:textSize="18sp" />
    </RelativeLayout>
    <!-- 加载更多 -->
    <RelativeLayout
        android:id="@+id/loader_load"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:visibility="gone" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="点此加载更多"
            android:textSize="18sp" />
    </RelativeLayout>
    <!-- 已显示全部 -->
    <RelativeLayout
        android:id="@+id/loader_none"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:visibility="gone" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="已显示全部"
            android:textSize="18sp" />
    </RelativeLayout>
</RelativeLayout>

PagerListView定义


import com.example.fxgandroid.R;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ListView;
import android.widget.AbsListView.OnScrollListener;
/**
 * 自定义ListView,添加分页支持。点击底部提示View或者滚动到底部时加载更多数据
 * 
 * @author fengxiaogang
 * 
 */
public class PagerListView extends ListView implements OnScrollListener {
// 底部View,正在加载、加载更多、已显示全部数据
private View footerView;
private View loadingView;
private View loadView;
private View noneView;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值