Android XListView下拉刷新和上拉加载更多
作者:杨道龙 发布时间:2022-11-01 19:07:45
标签:XListView,下拉刷新,上拉加载
市面上有好多的类比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();
运行看看效果:
如果想要改变它的样式,也是很简单的。因为它的头布局和为布局是独立开的,知直接去布局文件修改一下显示样式就可以了。
来源:http://blog.csdn.net/qq_32059827/article/details/53167655


猜你喜欢
- step1. 导包(导入要使用的标签的jar文件)。step2. 使用taglib指令引入要使用的标签。taglib指令: &nb
- 今天看见一个Android 扑克卡片翻转效果的帖子,于是手痒想学一学,由于接触过的Animation动画等比较少,所以感觉很新奇。首先,说一
- 一、背景项目中要解析xml,由于Dom4j的诸多优点,我就用Dom4j解析xml,代码如下:public void readXML() {
- Windows Data Type.NET Data TypeBOOL, BOOLEANBoolean or Int32BSTRString
- Java Spring Controller 获取请求参数的几种方法 1、直接把表单的参数写在Controller相应的方法的形参
- Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口)、Org.apache接口和Android.n
- 本文为大家分享了java实现百度云OCR识别的具体代码,高精度OCR识别身份证信息,供大家参考,具体内容如下1.通用OCR文字识别这种OCR
- 前言平时做一些统计数据,经常从数据库或者是从接口获取出来的数据,单位是跟业务需求不一致的。比如, 我们拿出来的 分, 实际上要是元又比如,我
- 前言我们知道在Android开发中不能在非ui线程中更新ui,但是,有的时候我们需要在代码中执行一些诸如访问网络、查询数据库等耗时操作,为了
- Maven 作为一个优秀的项目管理工具,其插件机制为其功能扩展提供了非常大的便捷性。虽然说大多数情况下,我们可能不太会自己去编写 Maven
- 本文实例分析了C# SQlite操作方法。分享给大家供大家参考,具体如下:最近项目需求用C#保存一些数据,如此先总结一下。需要下载Sqlit
- 首先写个单例:public class SingleDemo { private static SingleDemo s =
- CopyOnWriteArrayList介绍它相当于线程安全的ArrayList。和ArrayList一样,它是个可变数组;但是和Array
- 对于跨域,相信同学们都有所了解。前端的跨域的若干种方式,大家也都知道,什么 JSONP,iframe+domain 等等。但是我们今天的主题
- 前言在前面的2个章节中,一一哥 带大家实现了在Spring Security中添加图形验证码校验功能,其实Spring Security的功
- 一、引言Good Good Study,Day Day UpMP自带的条件构造器虽然很强大,有时候也避免不了写稍微复杂一点业务的sql,那么
- 引言用过Spring Cloud的同学都知道在使用动态配置刷新的我们要配置一个 @RefreshScope,在类上才可以实现对象属性的的动态
- 本文实例为大家分享了C#实现订单管理程序的具体代码,供大家参考,具体内容如下订单管理的控制台程序,能够实现添加订单、删除订单、修改订单、查询
- 前言每种语言都会有字符串的操作,因为字符串是我们平常开发使用频率最高的一种类型。今天我们来聊一下Java的字符串操作及在某些具体方法中与C#
- 这篇文章主要介绍了SpringCloud断路器Hystrix原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参