listview 的分页加载

来源:互联网 发布:类似淘宝千里眼的插件 编辑:程序博客网 时间:2024/05/30 22:42

listview的用法都不用说了吧,listview的适配器及优化。

1.首先创建一个类继承listview.并实现他的构造方法。三个都要实现 。
2.然后创建一个方法,并在方法中加载视图,然后把视图加载到listview的底部,用于加载所需要的数据。
3.三个构造方法都要都要调用这个方法。

4.实现listview的滑动事件。、

5,创建接口,创建抽象方法。

下面是主要代码;

<pre name="code" class="java"><span style="font-family:SimSun;font-size:14px;">package com.example.ezamhuanxin;import android.content.Context;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.AbsListView;import android.widget.ListView;/** * Created by 孙贝贝 on 2016/9/26. */public class Food extends ListView implements OnScrollListener {    //  第一个条目的索引    private int lfirstVisibleItem;    // 最后的条目的索引    private int lastVisibleItem;    // 总的条目数    private int ltotalItemCount;    private boolean isloading = true;    private InterfactDate interfactDate;    private View view;    public Food(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        initview();    }    public Food(Context context, AttributeSet attrs) {        super(context, attrs);// TODO Auto-generated constructor stub        initview();    }    public Food(Context context) {        super(context);// TODO Auto-generated constructor stub        initview();    }    private void initview() {        this.setOnScrollListener(this);        view = LayoutInflater.from(getContext()).inflate(R.layout.foot, null, false);        this.addFooterView(view);        view.setVisibility(View.INVISIBLE);    }    // visibleItemCount显示的条目数//滚动完成后的一个状态 ,通过这个方法能拿到当前的一些值和状态/*firstVisibleItem:第一个显示的条目  12 * visibleItemCount:显示的条目个数  8* totalItemCount:总共的条目数: 20* * 所以说当firstVisibleItem+visibleItemCoun=totalItemCount这个时候 就说明滑动到底了,该加载数据了*/    @Override    public void onScroll(AbsListView view, int firstVisibleItem,                         int visibleItemCount, int totalItemCount) {// TODO Auto-generated method stub        lfirstVisibleItem = firstVisibleItem;        lastVisibleItem = visibleItemCount + firstVisibleItem;        ltotalItemCount = totalItemCount;    }//这个方法是当滚动状态变化的时候触发/** scrollState就是当前的状态*/    @Override    public void onScrollStateChanged(final AbsListView view, int scrollState) {// 当滑动的状态停顿的时候        if (scrollState == SCROLL_STATE_IDLE) {//         当最后一个的条目的数和总的条目数相同的时候            if (lastVisibleItem == ltotalItemCount) {                System.out.println("已经到最后了");                if (isloading) {                    isloading = false;                    view.setVisibility(View.VISIBLE);                    Handler handler = new Handler();                    handler.postDelayed(new Runnable() {                        @Override                        public void run() {                            interfactDate.setData();                            isloading = true;                            view.setVisibility(View.INVISIBLE);                        }                    }, 2000);                }            }        }    }    public interface InterfactDate {        void setData();    }    public void setInterface(InterfactDate date) {        interfactDate = date;    }}</span>



下面是在Mainactivity中的加载;

  

private void loadMore(){        for(int a=0;a<6;a++){        list.add("大家好"+a);        }        adapter.notifyDataSetChanged();        }private void initview(){        food=(Food)findViewById(R.id.listview);        food.setInterface(new InterfactDate(){@Overridepublic void setData(){        loadMore();        }        });        }<span style="color:#6633ff;"></span>




2 0