ListView实现分页且优化

来源:互联网 发布:java 类 编辑:程序博客网 时间:2024/05/29 11:00

1.创建一个类 有2个成员变量 来当做数据源

public class News {   String title;    String content;}

2.初始化listView数据 ,添加到集合中去

private Vector<News> vector;

private int index = 1;public void initData(){    for(int i=0;i<15;i++) {        News n = new News();        n.title = "title"+index;        n.content="content"+index;        index++;        vector.add(n); 把数据都添加到集合中    }}

3.自定义Adapter 优化ListView 减少View对象的创建和id的查找

@Overridepublic View getView(int position, View convertView, ViewGroup parent) {    ViewHodler viewHodler;    if (convertView == null) {   //判断是否为null 减少加载xml文件的次数        convertView = getLayoutInflater().inflate(R.layout.list_5, null); 加载xml文件        viewHodler = new ViewHodler();           viewHodler.content = (TextView) convertView.findViewById(R.id.content_text);        viewHodler.title = (TextView) convertView.findViewById(R.id.title_text);        convertView.setTag(viewHodler);   把viewHolder当做标记    } else {        viewHodler = (ViewHodler) convertView.getTag(); 取出标记     }    News n = vector.get(position); 取出每一个坐标对应的 TextView的值    viewHodler.content.setText(n.content);  设置要显示的text    viewHodler.title.setText(n.title);    return convertView;}class ViewHodler { //创建一个类 用来初始化ListView所显示的所有的控件对象   减少多次查找  提高效率性能    TextView title;     TextView content;}

4.监听滚动事件  判断是否是滑动到底部 并且是否是 显示最后一条数据

private int visibleLastIndex;//用来显示最后一条数据的索引@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {     if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE && myAdapter.getCount() == visibleLastIndex) {        new LoadDataThread().start(); 开启线程(因为不能直接让主线程改变控件  通过Handle来完成)    }}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {    visibleLastIndex = firstVisibleItem + visibleItemCount - 1;   (第一条+总共的-1)=最后一条的索引  (-1是因为 有一个footerView)}

5.借用Handle 来通知主线程 重新加载数据 达到下拉刷新数据 分页的效果

private Handler handler = new Handler() {    @Override    public void handleMessage(Message msg) {        switch (msg.what) {            case 0x123: {  接收消息                myAdapter.notifyDataSetChanged(); 让适配器重新加载数据集                break;            }        }    }};class LoadDataThread extends Thread {    @Override    public void run() {        initData();  创建一个子线程 用来重复提供数据源        try {            Thread.sleep(2000);        } catch (InterruptedException e) {            e.printStackTrace();        }        handler.sendEmptyMessage(0x123); 发送消息    }
6.设置footerView 提示信息 (正在加载中 请稍后。。。)

View footerView = getLayoutInflater().inflate(R.layout.loading, null);list_5.addFooterView(footerView);


0 0
原创粉丝点击