listview实现分页效果(底部正在加载样式)

在现在app的listview中,我们可以看到很多数据下拉到底部,会出现正在加载的效果,然后再更新数据,最近自己也琢磨做一个,感觉其实还是很简单的,下面就是代码实现。


1.重写listview。

    我们要自定义一个listview来实现这些功能,下面是代码

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;


public class DownLoadingListview extends ListView implements OnScrollListener {
    View view;
    Context context;
    int totalItemCount=0;
    int lastitem=0;
    boolean isLoading=false;
    public DownLoadingListview(Context context) {
        super(context);
        initView( context);
    }

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

    public DownLoadingListview(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context);
    }

    //初始化Listview
    private  void initView(Context context){
        this.context=context;
        //加载底部正在加载视图
        view= LayoutInflater.from(context).inflate(R.layout.downloading_item,null);
        //进入设置隐藏
        view.findViewById(R.id.footer).setVisibility(View.GONE);
        //添加到listview里面
        this.addFooterView(view);
        //设置滚动监听
        this.setOnScrollListener(this);

    }

	//实现滚动监听事件,来判断是否达到listview数据的最后一项
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        //如果当前的item数量等于总item数量,并且滚动的状态已经停止了,我们就显示底部正在加载的布局
        if (totalItemCount==lastitem&&scrollState==SCROLL_STATE_IDLE){
          //如果是正在加载,就显示,否则不显示
           if (!isLoading) {
               isLoading=true;
               view.findViewById(R.id.footer).setVisibility(View.VISIBLE);
           }
            //加载更多数据
            loadinglistner.onLoad();
        }
    }
    //对应三个int的参数的依次意义:item第一个位置,可见item数量,item总的数量
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
       //得到总共可见的item,如果等于总的item数量,也就是totalitemcount的时候,就是最后的一个item
        this.lastitem=firstVisibleItem+visibleItemCount;
        this.totalItemCount=totalItemCount;
    }
    //定义接口回调
    //加载更多数据
    //更新界面显示
    public  interface LoadingListener{
        public  void onLoad();
    }

    LoadingListener loadinglistner;
    //获取接口
    public  void  setInterFace(LoadingListener loadinglistner){
        this.loadinglistner=loadinglistner;

    }
}
我们在自定义的listview中定义了回调接口并且初始化,所以要在mainactivity中进行回调的具体操作
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

import static down_loading_listview.testforlistviewloading.R.id.listview;

public class MainActivity extends AppCompatActivity implements DownLoadingListview.LoadingListener
{
    DownLoadingListview loadingListview;
    List<String> list;
    MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loadingListview= (DownLoadingListview) findViewById(listview);
        list=new ArrayList<>();
	//设置监听接口(回调)
        loadingListview.setInterFace(this);
        for (int i = 0; i < 4; i++) {
            list.add("qwe");
            list.add("fsdaf");
            list.add("q234234we");
            list.add("q3242342311we");
        }
         myAdapter=new MyAdapter(this,list);
        loadingListview.setAdapter(myAdapter);


    }

    //接口回调
    @Override
    public void onLoad() {
        //获取更多数据,通知listview更新界面
        Handler handler=new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 4; i++) {
                    list.add("1111");
                    list.add("23232323");
                    list.add("111223");
                    list.add("343434343");
                }
		//此方法是在madapter进行notifydatasetChanged操作
                myAdapter.update();



            }
        },4000);

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值