android 下拉刷新listview,Android XListView下拉刷新和上拉加载更多

市面上有好多的类比ListView刷新数据的开源框架,如:v4包自带的SwipeRefreshLayout ,以及集ListView、GridView甚至WebView于一身的Pulltorefresh等等。前述的两个开源框架目前使用也算频繁。有兴趣的读者可以自行搜索,当然有时间一定回来对所有的使用方式做一个汇总和比较。今天介绍的这款框架,专门针对ListView做下拉刷新与上拉加载的,如果单单是ListView就显得更加简单方便易于理解。

1、首先引入xListView_lib库到自己的Demo上

2、使用步骤

它的使用步骤跟普通的ListView是一样,这也是选择它的原因。使用非常简单方便。

布局如下so easy:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/xlv"

android:layout_width="match_parent"

android:layout_height="match_parent" />

按照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 datas = new ArrayList();

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 datas = new ArrayList();

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();

运行看看效果:

如果想要改变它的样式,也是很简单的。因为它的头布局和为布局是独立开的,知直接去布局文件修改一下显示样式就可以了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值