listview 的分页加载

本文介绍了ListView的使用,重点讨论了ListView的适配器优化和滑动事件的实现。通过创建接口和抽象方法,实现了ListView的分页加载功能。
摘要由CSDN通过智能技术生成

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(){

@Override
public void setData(){
        loadMore();

        }
        });

        }<span style="color:#6633ff;">
</span>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值