ListView 上拉加载更多

首先来个效果图

界面布局

<?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:id="@+id/activity_list_view_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.it.controlstudy.ListViewRefreshActivity">
<ListView
android:id="@+id/listviewrefresh_lv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</RelativeLayout>

ListView Item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/listviewrefrsh_item_iv"
android:background="@drawable/img2"
android:layout_marginLeft="30dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_width="80dp"
android:layout_height="80dp"/>
<TextView
android:id="@+id/listviewrefrsh_item_tv"
android:text="This is a computer!"
android:layout_marginTop="30dp"
android:textSize="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>

Load More 视图

<?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="horizontal"> <ProgressBar
android:layout_marginLeft="60dp"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <TextView
android:text="Load more ..."
android:textSize="20dp"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>

Activity


public class ListViewRefreshActivity extends AppCompatActivity { public ListView listView;
public View loadmoreView;
public int last_index; //当前页面最下方ListView Item在adapter中的位置
public int total_index; //所有ListView的Item总个数
public List<String> list = new ArrayList<>();// 数据集合
public MyBaseAdapter adapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_refresh); listView = (ListView) findViewById(R.id.listviewrefresh_lv); // 获得自定义的刷新视图
loadmoreView= View.inflate(ListViewRefreshActivity.this,R.layout.listviewrefresh_loadmore_layout,null);
// 设置刷新视图默认情况下是不可见的,并且不占空间
loadmoreView.setVisibility(View.GONE);
// 添加刷新视图到ListView中
listView.addFooterView(loadmoreView,null,false); //初始化集合数据
for (int i = 1; i <= 10; i++) {
list.add("I am the "+i+" computer!");
} //为ListView设置adapter
adapter = new MyBaseAdapter(this, list);
listView.setAdapter(adapter); //设置ListView的监听事件
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
/**
* 监听着ListView的滑动状态改变。
* 一共有三种状态
* SCROLL_STATE_TOUCH_SCROLL:手指正拖着ListView滑动
* SCROLL_STATE_FLING:ListView自由滑动
* SCROLL_STATE_IDLE:ListView滑动后静止
* */
@Override
public void onScrollStateChanged(AbsListView absListView, int scrollState) { //ListView 处于最下方,并且滑动停止
if(last_index == total_index && (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE))
{
//设置刷新界面可见
loadmoreView.setVisibility(View.VISIBLE);
//加载更多数据
onLoad();
}
} /**
* firstVisibleItem: 屏幕中显示的第一个Item数据在adapter中的位置
* visibleItemCount:屏幕中显示Item的个数
* totalItemCount: 在adapter中的总Item数
* */
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
//计算最后一个Item位置,最后根据这个值判断是否到达ListView最下方
last_index = firstVisibleItem+visibleItemCount;
total_index = totalItemCount; System.out.println("last: "+last_index);
System.out.println("total: "+total_index);
} });
} /**
* 加载更多数据
*/
public void onLoad()
{
new Thread(new Runnable() {
@Override
public void run() { try {
//模拟耗时操作
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
} //向数据集中添加数据
for (int i = 0; i < 10; i++) {
list.add("I am the "+(list.size()+1)+" computer!");
}
runOnUiThread(new Runnable() {
@Override
public void run() { //刷新ListView
adapter.updateView(list); //加载数据结束后使刷新界面不可见
loadmoreView.setVisibility(View.GONE);
}
}); }
}).start(); } class MyBaseAdapter extends BaseAdapter{ public List<String> list;
public LayoutInflater inflater; public MyBaseAdapter(Context context, List<String> list) {
this.list=list;
this.inflater=LayoutInflater.from(context);
} @Override
public int getCount() {
return list.size();
} @Override
public Object getItem(int i) {
return list.get(i);
} @Override
public long getItemId(int i) {
return 0;
} public void updateView(List<String> nowList){
this.list=nowList;
this.notifyDataSetChanged(); //强制动态刷新数据进而调用getView方法
} @Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHoder;
if(view ==null){
viewHoder=new ViewHolder();
view=inflater.inflate(R.layout.listviewrefresh_item_layout,null); viewHoder.imageView=(ImageView) view.findViewById(R.id.listviewrefrsh_item_iv);
viewHoder.textView=(TextView) view.findViewById(R.id.listviewrefrsh_item_tv);
view.setTag(viewHoder); }else {
viewHoder=(ViewHolder)view.getTag();
} viewHoder.textView.setText(list.get(i)); return view;
}
class ViewHolder{
ImageView imageView;
TextView textView;
}
}
}

ListView 上拉加载更多的更多相关文章

  1. android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)

    Android实现上拉加载更多功能以及下拉刷新功能, 采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库. 目前他支持的控件有:ListView, ExpandableL ...

  2. google官方的下拉刷新+自定义上拉加载更多

    转载请标注转载:http://blog.csdn.net/oqihaogongyuan/article/details/50949118 google官方的下拉刷新+自定义上拉加载更多 现在很多app ...

  3. ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多

    ListView实现Item上下拖动交换位置  并且实现下拉刷新  上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...

  4. android ListView下拉刷新 上拉加载更多

    背景 最近在公司的项目中要使用到ListView的下拉刷新和上拉加载更多(貌似现在是个项目就有这个功能!哈哈),其实这个东西GitHub上很多,但是我感觉那些框架太大,而且我这个项目只用到了ListV ...

  5. ListView下拉刷新上拉加载更多实现

    这篇文章将带大家了解listview下拉刷新和上拉加载更多的实现过程,先看效果(注:图片中listview中的阴影可以加上属性android:fadingEdge="none"去掉 ...

  6. Android中自定义ListView实现上拉加载更多和下拉刷新

    ListView是Android中一个功能强大而且很常用的控件,在很多App中都有ListView的下拉刷新数据和上拉加载更多这个功能.这里我就简单记录一下实现过程. 实现这个功能的方法不止一个,Gi ...

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

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

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

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

  9. react-native-page-listview使用方法(自定义FlatList/ListView下拉刷新,上拉加载更多,方便的实现分页)

    react-native-page-listview 对ListView/FlatList的封装,可以很方便的分页加载网络数据,还支持自定义下拉刷新View和上拉加载更多的View.兼容高版本Flat ...

随机推荐

  1. [NOI2018]屠龙勇士

    题目描述 题解 考虑增量法. 假设我们已经做完了前k个条件,前面的模数连乘起来的结果为M,答案为X,当前的攻击力为x,龙的血量为a. 那么我们这一次的答案的表达形式是X+t*M的. 这一次需要满足的是 ...

  2. Python爬虫之一

    1. 爬虫的选取:scrapy和requests+beautifuisoup scrapy是框架,而requests和beautifulsoup是库.scrapy框架是可以加如requests和bea ...

  3. 关于vue的域名重定向和404

    //创建路由对象并配置路由规则 let router = new VueRouter({ routes:[ {path:'/',redirect:{name:"index"}}, ...

  4. FreeNAS系统总结

    FreeNAS简介 FreeNAS是一套免费的NAS服务器,它能将一部普通PC变成网络存储服务器.该软件基于FreeBSD,Samba 及PHP,支持CIFS (samba), FTP, NFS pr ...

  5. 金融量化分析【day112】:股票数据分析Tushare2

    目录 1.使用tushare包获取某股票的历史行情数据 2.使用pandas包计算该股票历史数据的5日局限和60日均线 3.matplotlib包可视化历史数据的收盘价和历史均线 4.分析输出所有金叉 ...

  6. Flink学习(三)状态机制于容错机制,State与CheckPoint

    摘自Apache官网 一.State的基本概念 什么叫State?搜了一把叫做状态机制.可以用作以下用途.为了保证 at least once, exactly once,Flink引入了State和 ...

  7. Django组件-用户认证

    用户认证 一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1.1 .authenti ...

  8. C++设计模式——中介者模式

    前言 我们都知道,这个国际政治是一门很深的学问,不玩政治的人是搞不懂的.那么多的国家,国家之间的关系又及其复杂:就好比现在,美国和中国有经济利益关系,美国又和日本有盟友关系,朝鲜又和中国有说不清道不明 ...

  9. mysql收集统计信息

    一.手动  执行Analyze table innodb和myisam存储引擎都可以通过执行“Analyze table tablename”来收集表的统计信息,除非执行计划不准确,否则不要轻易执行该 ...

  10. switch case 遇到判断type分支的写法

    一叶障目,没有接触到的知识点真是太多了...... 最近项目里需要用到一个小工具,就用winform写了一个出来,然后需要一个功能就是清空控件内容,我这个工具就用到了textbox和combobox, ...