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 ...
随机推荐
- scrapy之使用LinkExtractor提取链接
一.概述: 在页面含有少量链接时,使用selector来提取信息就可以,但如果链接特别多时,就需要用LinkExtractor来提取. 二.LinkExtractor构造器的各个参数: 1.allow ...
- 对于mysql数据库优化的见解
一.数据库占用的空间大小.表占用空间大小.索引占用空间大小 在用阿里云的数据库的时候经常出现磁盘空间爆满的情况.所以要经常查询数据库相关内容占用的磁盘大小,有很多mysql客户端如navicat 就可 ...
- CMDB服务器管理系统【s5day88】:采集资产-文件配置(一)
django中间件工作原理 整体流程: 在接受一个Http请求之前的准备 启动一个支持WSGI网关协议的服务器监听端口等待外界的Http请求,比如Django自带的开发者服务器或者uWSGI服务器. ...
- 金融量化分析【day112】:量化平台的使用-初始化函数
一.set_benchmark - 设置基准 1.实现代码 # 导入函数库 import jqdata #初始化函数,设定基准等等 def initialize(context): set_bench ...
- SQL Server数据库的备份和还
转:http://blog.csdn.net/zwj7612356/article/details/8188025 在sql server数据库中,备份和还原都只能在服务器上进行,备份的数据文件在服务 ...
- 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
码云链接 https://gitee.com/A5320/pair_programming_code 需求分析 实现一个命令行程序,要求: 1.自动生成小学四则运算题目(加.减.乘.除) 2.支持整数 ...
- django - 总结 - form表单
{{ form.as_table }} 以表格的形式将它们渲染在<tr> 标签中 {{ form.as_p }} 将它们渲染在<p> 标签中 {{ form.as_ul }} ...
- 使用SO_REVTIMEO套接字选项为recvfrom设置超时
void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen) { int n; ]; struct timeval ...
- FTP主动及被动模式效果图
- go语言学习 一
1.变量声明 指定变量类型,声明后若不赋值,使用默认值 根据值自行判定变量类型. 省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误 2.go语言作用域 函数内定义的变量称为局 ...