ListView 上拉加载更多
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 上拉加载更多的更多相关文章
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
Android实现上拉加载更多功能以及下拉刷新功能, 采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库. 目前他支持的控件有:ListView, ExpandableL ...
- google官方的下拉刷新+自定义上拉加载更多
转载请标注转载:http://blog.csdn.net/oqihaogongyuan/article/details/50949118 google官方的下拉刷新+自定义上拉加载更多 现在很多app ...
- ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多
ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...
- android ListView下拉刷新 上拉加载更多
背景 最近在公司的项目中要使用到ListView的下拉刷新和上拉加载更多(貌似现在是个项目就有这个功能!哈哈),其实这个东西GitHub上很多,但是我感觉那些框架太大,而且我这个项目只用到了ListV ...
- ListView下拉刷新上拉加载更多实现
这篇文章将带大家了解listview下拉刷新和上拉加载更多的实现过程,先看效果(注:图片中listview中的阴影可以加上属性android:fadingEdge="none"去掉 ...
- Android中自定义ListView实现上拉加载更多和下拉刷新
ListView是Android中一个功能强大而且很常用的控件,在很多App中都有ListView的下拉刷新数据和上拉加载更多这个功能.这里我就简单记录一下实现过程. 实现这个功能的方法不止一个,Gi ...
- react-native ListView 封装 实现 下拉刷新/上拉加载更多
1.PageListView 组件封装 src/components/PageListView/index.js /** * 上拉刷新/下拉加载更多 组件 */ import React, { Com ...
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向
很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷 ...
- react-native-page-listview使用方法(自定义FlatList/ListView下拉刷新,上拉加载更多,方便的实现分页)
react-native-page-listview 对ListView/FlatList的封装,可以很方便的分页加载网络数据,还支持自定义下拉刷新View和上拉加载更多的View.兼容高版本Flat ...
随机推荐
- CRLF在过滤XSS语句后打Cookie方式
看了很长时间的漏洞奖励计划,学到了不少骚姿势,我觉得这个姿势很不错,总结下写篇文章发出来.针对CRLF漏洞打cookie的方法. 这里不讲概念挖掘方式了,以实战为主: 阅读文章前先参考文章:http: ...
- SQL 统计某一天的数据量时, 使用 dateValue(字段) 与 between 性能差异很明显。
感觉好久没有写sql语句了... 今天需要写一个统计某一天的数据时,考虑到字段的内容格式是: 2018-12-18 09:36:23 我开始写的是: select count(id) as reCo ...
- PHP基础之$_SERVER的详细参数与说明
这几天准备静下心来看看平时忽略的一些PHP基础知识,也算是一个复习吧. 今天准备复习的是$_SERVER这个变量. 说明:$_SERVER 是一个包含了诸如头信息(header).路径(path).以 ...
- matplotlib绘图总结
本文作为学习过程中对matplotlib一些常用知识点的整理,方便查找. 类MATLAB API 最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数. from p ...
- iframe 自适应高度、父子页面传值、回调
总结一下最近用iframe遇到的问题与解决办法: 结构:主页面main.html,里面套用iframe.iframe不能出现滚动条,自适应子页面高度.内容多了滚动条是main.html页面的. 1. ...
- Hbase G1 gc 调优最终参数
export HBASE_HEAPSIZE=16384export HBASE_OFFHEAPSIZE=25gexport HBASE_MASTER_OPTS="$HBASE_MASTER_ ...
- jQuery使用(九):队列及实现原理、基于队列模拟实现animate()
开篇一张图之队列模型 queue()如何使用? queue()原理实现? 基于queue()模拟实现animate() 一.使用queuer方法.理解队列原理 queue() dequeue() cl ...
- oldboy s21day12.设计商城系统,主要提供两个功能:商品管理、会员管理。
#!/usr/bin/env python# -*- coding:utf-8 -*- # 1.写出三元运算的基本格式及作用?'''a if a>b else b''' # 2.什么是匿名函数? ...
- JavaScript 执行环境、作用域、内存管理及垃圾回收机制
前言 JavaScript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存. [原理]找出那些不再继续使用的变量,然后释放其占用的内存.为此,垃圾收集器会按照固定的时间间隔( ...
- Mongodb注入
0x01 Brief Description 作为nosql(not only sql)数据库的一种,mongodb很强大,很多企业也在用到.相对于sql数据库,nosql数据库有以下优点:简单便捷. ...