先上效果图

加载完数据

首先定义一个底部正在加载的布局footer_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:id="@+id/load_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="horizontal"android:paddingBottom="10dip"android:paddingTop="10dip" ><ProgressBarstyle="?android:attr/progressBarStyleSmall"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:textColor="@color/red"android:textStyle="bold"android:text="正在加载..." /></LinearLayout>
</LinearLayout>

自定义ListView---------LoadListView.java

package com.zwb.listviewloaddata.view;import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ListView;import com.zwb.listviewloaddata.R;/*** 类描述:自定义的ListView* 作者:zwb* 时间:16-5-9 11:21* 邮箱:@163.com*/
public class LoadListView extends ListView implements AbsListView.OnScrollListener {View footer;// 底部布局;int totalItemCount;// 总数量;int lastVisibleItem;// 最后一个可见的item;boolean isLoading;// 正在加载;ILoadListener iLoadListener;public LoadListView(Context context) {super(context);initView(context);}public LoadListView(Context context, AttributeSet attrs) {super(context, attrs);initView(context);}public LoadListView(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 = inflater.inflate(R.layout.footer_layout, null);footer.findViewById(R.id.load_layout).setVisibility(View.GONE);this.addFooterView(footer);this.setOnScrollListener(this);}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {// TODO Auto-generated method stubthis.lastVisibleItem = firstVisibleItem + visibleItemCount;this.totalItemCount = totalItemCount;}@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {// TODO Auto-generated method stubif (totalItemCount == lastVisibleItem&& scrollState == SCROLL_STATE_IDLE) {if (!isLoading) {isLoading = true;footer.findViewById(R.id.load_layout).setVisibility(View.VISIBLE);// 加载更多iLoadListener.onLoad();}}}/*** 加载完毕*/public void loadComplete(){isLoading = false;footer.findViewById(R.id.load_layout).setVisibility(View.GONE);}public void setInterface(ILoadListener iLoadListener){this.iLoadListener = iLoadListener;}//加载更多数据的回调接口public interface ILoadListener{public void onLoad();}
}

在布局文件中引用自定义的ListView

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:background="@color/white"android:layout_height="match_parent"tools:context="com.zwb.listviewloaddata.MainActivity"><com.zwb.listviewloaddata.view.LoadListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:cacheColorHint="#00000000"android:dividerHeight="5dip"/>
</RelativeLayout>

ListView的item资源文件:

item_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:card_view="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_marginRight="5dp"android:layout_centerInParent="true"android:background="@color/white"card_view:cardCornerRadius="8dp"><LinearLayoutandroid:gravity="center_vertical"android:orientation="horizontal"android:background="@color/white"android:layout_width="match_parent"android:layout_height="60dp"><ImageViewandroid:id="@+id/item_img"android:layout_width="50dp"android:layout_height="50dp"android:background="@mipmap/ic_launcher"android:layout_marginLeft="10dp"/><LinearLayoutandroid:layout_marginLeft="10dp"android:orientation="vertical"android:layout_width="wrap_content"android:layout_height="wrap_content"><TextViewandroid:id="@+id/item_name"android:text="我是标题"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/item_msg"android:text="今天天气还可以啊"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout></LinearLayout>
</android.support.v7.widget.CardView>

 接下来就是在Activity中初始化数据和对ListView设置数据

MainActivity.java

package com.zwb.listviewloaddata;import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;import com.zwb.listviewloaddata.adapter.ItemAdapter;
import com.zwb.listviewloaddata.entity.ItemEntity;
import com.zwb.listviewloaddata.view.LoadListView;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity implements LoadListView.ILoadListener{private ArrayList<ItemEntity> list = new ArrayList<>();private LoadListView listView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化数据的方法getData();showListView(list);}private ItemAdapter adapter;private void showListView(ArrayList<ItemEntity> list) {if (adapter == null){listView = ((LoadListView) findViewById(R.id.listView));listView.setInterface(this);adapter = new ItemAdapter(getApplicationContext() ,list);listView.setAdapter(adapter);}else {adapter.onDateChange(list);}}private void getMoreData() {for (int i = 0; i < 3; i++) {ItemEntity entity = new ItemEntity();entity.setName("新的测试标题");entity.setMsg("我是一条新的测试的内容啊~");list.add(entity);}}private void getData() {for (int i = 0; i < 10; i++) {ItemEntity entity = new ItemEntity();entity.setName("测试标题");entity.setMsg("我是一条测试的内容啊~");list.add(entity);}}@Overridepublic void onLoad() {Handler handler = new Handler();handler.postDelayed(new Runnable() {@Overridepublic void run() {//加载数据getMoreData();//更新ListView的显示showListView(list);//ListView加载完毕listView.loadComplete();}} , 2000);}}

ListView的Adapter

ItemAdapter.java

package com.zwb.listviewloaddata.adapter;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;import com.zwb.listviewloaddata.R;
import com.zwb.listviewloaddata.entity.ItemEntity;import java.util.ArrayList;
import java.util.List;/*** 类描述:ListView的Adapter* 作者:zwb* 时间:16-5-9 11:06* 邮箱:@163.com*/
public class ItemAdapter extends BaseAdapter{private Context context;private ArrayList<ItemEntity> list;public ItemAdapter(Context context, ArrayList<ItemEntity> list) {this.context = context;this.list = list;}public void onDateChange(ArrayList<ItemEntity> list) {this.list = list;this.notifyDataSetChanged();}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ItemEntity entity = list.get(position);ViewHolder holder;if (convertView == null){holder = new ViewHolder();convertView = LayoutInflater.from(context).inflate(R.layout.item_layout , parent ,false);holder.name = ((TextView) convertView.findViewById(R.id.item_name));holder.msg = ((TextView) convertView.findViewById(R.id.item_msg));convertView.setTag(holder);}else {holder = ((ViewHolder) convertView.getTag());}holder.name.setText(entity.getName());holder.msg.setText(entity.getMsg());return convertView;}class ViewHolder{TextView name;TextView msg;}
}

ok大功告成。

下载链接

Android_ListView分页

Android_ListView上拉加载更多(ListView分页功能)相关推荐

  1. Flutter开发之ListView下拉刷新上拉加载更多(35)

    在Flutter开发之ListView组件(21) 文章中,我们了解了ListView组件的基本使用.但是数据比较少,没有涉及分页加载.而实际开发中,下拉刷新和分页加载几乎是所有APP的标配.在iOS ...

  2. Flutter ListView 下拉刷新与上拉加载更多

    ListView 下拉刷新与上拉加载更多 import 'dart:async'; import 'package:flutter/material.dart';/*** 有状态StatefulWid ...

  3. react-native ListView 封装 实现 下拉刷新/上拉加载更多

    1.PageListView 组件封装 src/components/PageListView/index.js /*** 上拉刷新/下拉加载更多 组件*/ import React, { Compo ...

  4. Flutter listview下拉刷新 上拉加载更多 功能实现

    下拉刷新 在Flutter中系统已经为我们提供了google material design的刷新功能 , 样式与原生Android一样. 我们可以使用RefreshIndicator组件来实现Flu ...

  5. 【Flutter】ListView 列表高级功能 ( ScrollController 上拉加载更多 )

    文章目录 一.ScrollController 上拉加载更多 二.ScrollController 使用流程 三.ScrollController 判定滑动到底部 四.完整代码示例 五.相关资源 一. ...

  6. Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向...

    很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷 ...

  7. Flutter ListView封装,下拉刷新、上拉加载更多

    Flutter ListView封装,下拉刷新.上拉加载更多 ​ 封装了Flutter的ListView,只要传递请求数据的方法和绘制item的方法进去就可以绘制ListView,同时支持下拉刷新.上 ...

  8. android listview自动加载更多,如何实现 Android ListView『上拉加载更多』?

    ListView上拉加载更多的UI需求 (1)向上滑动 ListView,当最后一个条目滚入屏幕时开始加载更多条目,在列表底部增加一个 footerView:一个 infinite progressB ...

  9. android listview下拉刷新动画,android 安卓 listview 支持下拉刷新 上拉加载更多

    [1]重写listViewimport java.text.SimpleDateFormat; import java.util.Date; import com.example.testdddlea ...

最新文章

  1. 假如时光倒流,你依然会变成现在的你
  2. mybatis的面试一对一,一对多,多对多的mapper.xml配置
  3. python表白代码照片墙-python入会生成照片墙 利用python生成照片墙代码
  4. 灰度图像的腐蚀与膨胀
  5. office控件显示不了_计算机二级office考试重点难点总结,考生必看!
  6. P4556,jzoj3397-[GDOI2014模拟]雨天的尾巴【树链剖分,线段树】
  7. (计算机组成原理)第一章计算机系统概述-王道重点习题及杂项总结
  8. mysql8.0.11密码_mysql8.0.11安装和修改密码(转载)
  9. 重用WINXP的系统还原功能
  10. 电脑音箱有电流声_音箱造成电流声的原因
  11. python数据库模式_python – 如何测试django数据库模式?
  12. 纯新手DSP编程--5.21--RTDX
  13. 【电力电子】功率因素\无功功率
  14. 渐变的alert_好看的alert样式或者弹窗样式
  15. java 博饼 算法_java博饼游戏( 完善中。。。。。。。。。。。)
  16. 怎么破解Windows账户密码
  17. 十八.国民技术MCU开发之UART模块LIN模式主从通信交互案例
  18. Zookeeper轻松上手
  19. html桌面天干地支,天干地支-janlen-ChinaUnix博客
  20. 用c语言编程一个英尺转换器,PTA-基础编程题目厘米换算英尺英寸-C基础版

热门文章

  1. JS 即时刷新验证码图片代码
  2. 普通门禁卡及各类复制卡相关知识
  3. 三星android 8.0的变化,三星发布最新android 8.0升级计划 最快11月部分升级
  4. mysql怎么加载bak文件_MySQL数据库(表)的导入导出(备份和还原)
  5. c 语言程序流程控制应用实验报告,程序流程控制实验报告.doc
  6. 短视频暴利躺赚的书单号玩法
  7. Linux:文件创建时间如何修改?
  8. CStdioFile 在文件末尾追加内容
  9. Scala中使用ansj分词库编写spark中文版WordCount
  10. 抖音视频解析的工具类