XListView下拉刷新和上拉加载更多详解
转载本专栏每一篇博客请注明转载出处地址,尊重原创。博客链接地址:小杨的博客
http://blog.csdn.net/qq_32059827/article/details/53167655
市面上有好多的类比ListView刷新数据的开源框架,如:v4包自带的SwipeRefreshLayout ,以及集ListView、GridView甚至WebView于一身的Pulltorefresh等等。前述的两个开源框架目前使用也算频繁。有兴趣的读者可以自行搜索,当然有时间一定回来对所有的使用方式做一个汇总和比较。今天介绍的这款框架,专门针对ListView做下拉刷新与上拉加载的,如果单单是ListView就显得更加简单方便易于理解。
1、首先引入xListView_lib库到自己的Demo上
2、使用步骤
它的使用步骤跟普通的ListView是一样,这也是选择它的原因。使用非常简单方便。
布局如下so easy:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" > <me.maxwin.view.XListView
android:id="@+id/xlv"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </RelativeLayout>
按照ListView的方式使用XlistView:
package com.itydl.xlistviewdemo; import java.util.ArrayList;
import java.util.List; import me.maxwin.view.XListView;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; public class MainActivity extends Activity { private XListView mXListView;
List<String> datas = new ArrayList<String>();
private MyAdapter adapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initDatas();
mXListView = (XListView) findViewById(R.id.xlv);
//设置适配器到ListView
adapter = new MyAdapter();
mXListView.setAdapter(adapter);
} /**模拟网络数据*/
private void initDatas() {
for (int i = 0; i < 50; i++) {
datas.add("我是第" + i + "条数据");
}
} private class MyAdapter extends BaseAdapter{ @Override
public int getCount() {
if(datas != null){
return datas.size();
}
return 0;
} @Override
public Object getItem(int position) {
if(datas != null){
return datas.get(position);
}
return null;
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
//模拟item为TextView
TextView textView = new TextView(MainActivity.this);
textView.setText(getItem(position)+"");
textView.setTextColor(Color.GREEN);
return textView;
} }
}
运行结果:
+
上边只是做了展示,并没有任何加载和刷新的效果。接下来就以完整代码形式,实现加载更多与刷新。
package com.itydl.xlistviewdemo; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import me.maxwin.view.XListView;
import me.maxwin.view.XListView.IXListViewListener;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; public class MainActivity extends Activity { private XListView mXListView;
List<String> datas = new ArrayList<String>();
private MyAdapter adapter;
private boolean isLoadMore;//是否正在加载更多数据的标记 private long preTime;//上一次刷新的当前系统时间毫秒值
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if(isLoadMore){
//消息是上拉加载更多
initDatas();
isLoadMore = false;
//刷新完毕,关闭上拉加载效果
mXListView.stopLoadMore();
}else{
//消息是下拉刷新
datas.clear();
initDatas();
//刷新完毕,关闭下拉刷新效果
mXListView.stopRefresh();
}
// 刷新listview
adapter.notifyDataSetChanged();
};
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initDatas();
mXListView = (XListView) findViewById(R.id.xlv);
//设置适配器到ListView
adapter = new MyAdapter();
mXListView.setAdapter(adapter);
initListener();
} private void initListener() {
//设置可以下拉刷新,默认就是true
mXListView.setPullRefreshEnable(true); //设置可以上拉加载,默认是false
mXListView.setPullLoadEnable(true); mXListView.setXListViewListener(new IXListViewListener() { @Override
public void onRefresh() {
// 下拉刷新,实际发送Handler
//发送一个空消息,延迟两秒后告知刷新数据
handler.sendMessageDelayed(Message.obtain(), 2000);
//添加上一次刷新的时间:
if(preTime != 0){
mXListView.setRefreshTime(refreshData(preTime));
}
preTime = System.currentTimeMillis();
} private String refreshData(long preTime) {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(preTime));
} @Override
public void onLoadMore() {
//标记正在加载更多,发送Handler
isLoadMore = true;
handler.sendMessageDelayed(Message.obtain(), 2000);
}
});
} /**模拟网络数据*/
private void initDatas() {
//实际开发应该子线程执行
for (int i = 0; i < 50; i++) {
datas.add("我是第" + i + "条数据");
}
} private class MyAdapter extends BaseAdapter{ @Override
public int getCount() {
if(datas != null){
return datas.size();
}
return 0;
} @Override
public Object getItem(int position) {
if(datas != null){
return datas.get(position);
}
return null;
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
//模拟item为TextView
TextView textView = new TextView(MainActivity.this);
textView.setText(getItem(position)+"");
textView.setTextColor(Color.GREEN);
return textView;
}
}
}
在上边代码中,添加了刷新和加载,并且在下拉刷新的同时,加入了刷新时候系统时间值。
注意的地方:设置可否下拉刷新默认为true,加载更多默认为false。需要加入下面两行代码:
//设置可以下拉刷新,默认就是true
mXListView.setPullRefreshEnable(true); //设置可以上拉加载,默认是false
mXListView.setPullLoadEnable(true);
在刷新完毕,一定记得关闭,即需要下面两行代码:
//刷新完毕,关闭上拉加载效果mXListView.stopLoadMore();
//刷新完毕,关闭下拉刷新效果
mXListView.stopRefresh();
运行看看效果:
如果想要改变它的样式,也是很简单的。因为它的头布局和为布局是独立开的,知直接去布局文件修改一下显示样式就可以了。
XListView下拉刷新和上拉加载更多详解的更多相关文章
- PullToRefresh下拉刷新 加载更多 详解 +示例
常用设置 项目地址:https://github.com/chrisbanes/Android-PullToRefresh a. 设置刷新模式 如果Mode设置成Mode.PULL_FROM_STAR ...
- juery下拉刷新,div加载更多元素并添加点击事件(二)
buffer.append("<div class='col-xs-3 "+companyId+"' style='padding-left: 10px; padd ...
- android--------自定义控件ListView实现下拉刷新和上拉加载
开发项目过程中基本都会用到listView的下拉刷新和上滑加载更多,为了方便重写的ListView来实现下拉刷新,同时添加了上拉自动加载更多的功能. Android下拉刷新可以分为两种情况: 1.获取 ...
- Android 自定义 ListView 上下拉动“刷新最新”和“加载更多”歌曲列表
本文内容 环境 测试数据 项目结构 演示 参考资料 本文演示,上拉刷新最新的歌曲列表,和下拉加载更多的歌曲列表.所谓"刷新最新"和"加载更多"是指日期.演示代码 ...
- Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理
RecyclerView已经写过两篇文章了,分别是Android 5.X新特性之RecyclerView基本解析及无限复用 和 Android 5.X新特性之为RecyclerView添加Header ...
- iscroll.js 下拉刷新和上拉加载
html代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- IOS 开发下拉刷新和上拉加载更多
IOS 开发下拉刷新和上拉加载更多 简介 1.常用的下拉刷新的实现方式 (1)UIRefreshControl (2)EGOTTableViewrefresh (3)AH3DPullRefresh ( ...
- IOS UITableView下拉刷新和上拉加载功能的实现
在IOS开发中UITableView是非常常用的一个功能,而在使用UITableView的时候我们经常要用到下拉刷新和上拉加载的功能,今天花时间实现了简单的UITableView的下拉刷新和上拉加载功 ...
- Android 使用PullToRefresh实现下拉刷新和上拉加载(ExpandableListView)
PullToRefresh是一套实现非常好的下拉刷新库,它支持: 1.ListView 2.ExpandableListView 3.GridView 4.WebView 等多种常用的需要刷新的Vie ...
随机推荐
- MySQL中的字符串函数
使用字符串数据 当使用字符串数据时,可以使用下面的字符数据类型. CHAR 固定长度.不足部分使用空格填充的字符串. varchar 变长字符串. text(MySQL和SQL Server)或CLO ...
- Hibernate 学习之Query查询(HQL查询)
package com.itcloud.test; import com.itcloud.pojo.Dept; import org.hibernate.Session; import org.hib ...
- 再谈前端HTML模板技术
在web2.0之前,写jsp的时候虽然有es和JSTL,但是还是坚持jsp.后面在外包公司为了快速交货,还是用了php Smart技术. web2.0后,前端模板技术风行. 代表有如下三大类: Str ...
- TopCoder SRM 559 Div 1 - Problem 900 CircusTents
传送门:https://284914869.github.io/AEoj/559.html 题目简述: n个实心圆,两两没有交集,在第一个圆上找一个点,使得它到另外一个圆上某个点的最短距离的最小值尽量 ...
- ●BZOJ 3996 [TJOI2015]线性代数
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3996 题解: 好题啊.(不太熟悉矩阵相关,所以按某些博主的模型转换来理解的)首先,那个式子可 ...
- BZOJ4870: [Shoi2017]组合数问题
4870: [Shoi2017]组合数问题 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ...
- ●BZOJ 4821 [Sdoi2017]相关分析
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4821 题解: 线段树是真的恶心,(也许是我的方法麻烦了一些吧)首先那个式子可以做如下化简: ...
- ●BZOJ 4665 小w的喜糖
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4665 题解: 容斥,dp令 v[i] 表示原来拥有i类糖果的人数. (一个套路,首先把每个糖 ...
- bzoj5100 [POI2018]Plan metra 构造
5100: [POI2018]Plan metra Time Limit: 40 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 189 Sol ...
- Codeforces Round#403 (Div. 1)
唉,昨天晚上迷迷糊糊地去打cf,结果fst两题,掉回蓝了... A.Andryusha and Colored Balloons 题意:给定一棵树,任意两个距离小等于二的点不能染相同的颜色,求最小颜色 ...