ListView 分页加载


1.新建一个底部布局

<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/load_layout"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:orientation="horizontal" >

    <ProgressBar
        android:id="@+id/pb"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="40dp"
        android:layout_marginLeft="20dp"
        android:gravity="center"
        android:layout_height="60dp" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:gravity="center"
        android:text="正在加载..." />

</LinearLayout>

 

2.创建自已的ListView,提供三个构造方法(在XML加载布局时,系统调用)

3.在initView()方法里,把底部布局添加到自定义的ListView

4.在构造方法里调用initView()

public MyListView(Context context) {
		super(context);
		initView(context);
	}
	
	public MyListView(Context context, AttributeSet attrs) {
		super(context, attrs);
		initView(context);
	}

	public MyListView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		initView(context);
	}

	/**
	 * 添加底部提示布局到ListView
	 * @param context
	 */
	private void initView(Context context){
		LayoutInflater inflater = LayoutInflater.from(context);
		footer_view = inflater.inflate(R.layout.footer, null);
		load_layout = (LinearLayout) footer_view.findViewById(R.id.load_layout);
		load_layout.setVisibility(View.GONE);
		this.addFooterView(footer_view);
		this.setOnScrollListener(this);
	}

5.实现OnScrollListener 接口,重写里面的 public void onScrollStateChanged(AbsListView view, int scrollState)
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) 方法里,把底部布局添加到自定义的ListView
onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount)  
firstVisibleItem 第一个可见的Item  visibleItemCount 可以看见的Item总数  totalItemCount Item的总数
6.用回调方法来添加数据,提供一个获取回调对象的方法,在onScrollStateChanged()中调用方法

private LinearLayout load_layout;
	private View footer_view;
	private int totalCount;
	private int lastCount; //最后一个可见的Item
	private boolean isLoading; // 是否正在滑动
	private LoadCallback mCallback;


7.在Activity 中实现回调接口和它的方法
  添加更多的数据  在ListView中显示出来 
8.模拟加载过程,调用Handler.postDelay()方法
9.加载完成,让底部布局消失

public class MainActivity extends Activity implements LoadCallback{
	private MyListView lv;
	private ArrayAdapter<String> adapter;
	private ArrayList<String> dataList = new ArrayList<String>();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		showListView(dataList);
	}
	Handler mHandler = new Handler();
	@Override
	public void LoadData() {
		// TODO Auto-generated method stub
		System.out.println("添加更多数据");
		
		mHandler.postDelayed(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				addData();
				showListView(dataList);
				//通知listview加载完成
				lv.LoadCompletion();
			}
		}, 2000);
		
	}
	
	private void showListView(ArrayList list) {
		// TODO Auto-generated method stub
		if(adapter == null){
			lv = (MyListView) findViewById(R.id.lv);
			lv.setListener(this);
			for(int i = 0; i < 20;i++){
				dataList.add("data"+i);
			}
			adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
		    lv.setAdapter(adapter);
		}else{
			dataList = list;
			adapter.notifyDataSetChanged();
		}
	}

	public void addData(){
		for(int i = 0; i < 2; i++){
			dataList.add("更多数据:"+(i+1));
		}
	}

	
}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值