ListView自动加载

写项目的时候经常用的这个listview自动加载,一般都是在网上找的,今天突发奇想想自己写一个,本来以为很高深,没想到挺简单的,

简单说明一下,

1.写一个footer,listview有一个addFooterView(),用这个方法把footer添加进去,当然footer要隐藏起来,不然你就会发现刚打开页面就有一个footer在那边

2.实现listview的滚动事件OnScrollListener;


直接上代码:

import android.content.Context;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.AbsListView.OnScrollListener;

/**
 * 自动加载的listview
 * @author 董殷
 *
 */
public class AutoLoadListView extends ListView implements OnScrollListener {

	private Context context;

	private View footer;
	private RelativeLayout footer_listview_rel;

	private OnLoadListener onLoadListener;
	
	int lastVisibleItem;//最后一个item的序号
	int totalItemCount;//总itme数量
	
	boolean isLoading;//判断是否加载数据

	public AutoLoadListView(Context context) {
		super(context);
		this.context = context;
		init();
	}

	public AutoLoadListView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.context = context;
		init();
	}

	public AutoLoadListView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		this.context = context;
		init();
	}

	private void init() {
		LayoutInflater inflater = LayoutInflater.from(context);

		footer = inflater.inflate(R.layout.footer_listview, null);

		footer_listview_rel = (RelativeLayout) footer
				.findViewById(R.id.footer_listview_rel);

		TextPaint tp = footer_listview_tv.getPaint(); 
		tp.setFakeBoldText(true); 
		
		footer_listview_rel.setVisibility(View.GONE);

		this.addFooterView(footer);
		
		this.setOnScrollListener(this);
	}

	@Override
	public void onScroll(AbsListView view, int firstVisibleItem,
			int visibleItemCount, int totalItemCount) {
		lastVisibleItem = firstVisibleItem + visibleItemCount;
		this.totalItemCount = totalItemCount;
	}

	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		
		if (totalItemCount == lastVisibleItem && scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
			if(!isLoading){
				isLoading = true;
				onLoad();
				footer_listview_rel.setVisibility(View.VISIBLE);
			}
		}

	}

	public void onLoad() {
		if (onLoadListener != null) {
			onLoadListener.onLoad();
			
		}
	}

	// 加载更多监听
	public void setOnLoadListener(OnLoadListener onLoadListener) {
		this.onLoadListener = onLoadListener;
	}

	/*
	 * 定义加载更多接口
	 */
	public interface OnLoadListener {
		public void onLoad();
	}
	
	public void setView(int num) {
		if(num<20){
			isLoading = true;
//			footer_listview_tv.setText("没有更多数据");
		}else{
			isLoading = false;
			footer_listview_rel.setVisibility(View.VISIBLE);
		}

	}



xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <RelativeLayout
        android:id="@+id/footer_listview_rel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="10dp"
        android:paddingTop="10dp" >

        <ProgressBar
            android:id="@+id/footer_listview_pb"
            style="?android:attr/progressBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dip"
            android:layout_marginRight="20dip"
            android:layout_marginTop="10dip"
            android:indeterminate="true" />

        <TextView
            android:id="@+id/footer_listview_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="加载中..." />
    </RelativeLayout>

</RelativeLayout>



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值