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

来源:互联网 发布:国外实时数据库有哪些 编辑:程序博客网 时间:2024/06/06 13:56
有些时候我们用到的原生的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;}@Overridepublic 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);        }    }}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,        int visibleItemCount, int totalItemCount) {    // TODO Auto-generated method stub    is_divPage = (firstVisibleItem + visibleItemCount == totalItemCount);}@Overridepublic 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
原创粉丝点击