PullToLoadListView的简单实现(api17以下包括17和api17以上有区别)

有些时候我们用到的原生的ListView需要增加上拉加载功能,而网上的许多PullToRefreshListView非常大,在这里我自己写了一个简单的上拉加载的ListView, 分享给大家,在这里就直接贴出代码,注意,api17和api17以上是有区别的,我在代码注释是非常详细的.注意,注释了的是api17以上的
package com.cnziz.traditionalpay.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import com.cnziz.traditionalpay.R;

public class PullToLoadListView extends ListView implements OnScrollListener,
OnClickListener {
private Context context;
private View footView;
private OnRefreshListener mRefreshListener;
private TextView btn_click_load_more;
private LinearLayout progress_layout;
private int page = 2;
private boolean is_divPage = false;
private int footerViewHeight; // 脚布局的高度

public static interface OnRefreshListener {
    public void onRefresh(int page);
}

public PullToLoadListView(Context context) {
    super(context);
    this.context = context;
    initView();
}

public PullToLoadListView(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
    initView();
}

public PullToLoadListView(Context context, AttributeSet attrs,
        int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    this.context = context;
    initView();
}

private void initView() {
    // TODO Auto-generated method stub
    setOnScrollListener(this);
    footView = View.inflate(context, R.layout.list_foot_layout, null);
    footView.measure(0, 0);
    footerViewHeight = footView.getMeasuredHeight();
    //footView.setPadding(0, -footerViewHeight, 0, 0);  //api17+
    footView.setVisibility(View.GONE);
    btn_click_load_more = (TextView) footView
            .findViewById(R.id.btn_click_load_more);
    progress_layout = (LinearLayout) footView
            .findViewById(R.id.progress_layout);
    btn_click_load_more.setOnClickListener(this);
    addFooterView(footView);
}

public void setOnRefreshListener(OnRefreshListener onRefreshListener) {
    this.mRefreshListener = onRefreshListener;
}

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
    // TODO Auto-generated method stub
    if (is_divPage && scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
        if (null != footView) {
            footView.setVisibility(View.VISIBLE);
            //footView.setPadding(0, 0, 0, 0); //api17+
            btn_click_load_more.setVisibility(View.VISIBLE);
            progress_layout.setVisibility(View.GONE);
        }
    } else {
        if (null != footView) {
            footView.setVisibility(View.GONE);
            //footView.setPadding(0, -footerViewHeight, 0, 0);
        }
    }
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
        int visibleItemCount, int totalItemCount) {
    // TODO Auto-generated method stub
    is_divPage = (firstVisibleItem + visibleItemCount == totalItemCount);
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    mRefreshListener.onRefresh(page);
    btn_click_load_more.setVisibility(View.GONE);
    progress_layout.setVisibility(View.VISIBLE);
}

public void onLoadComplete() {
    page++;
    footView.setVisibility(View.GONE);
    //footView.setPadding(0, -footerViewHeight, 0, 0);//api17+
}

public void clearPage() {
    page = 1;
}

}

加载的布局有点不太美观,需要的自己去修改,在这里把我的布局贴出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值