我们安卓中要实现listview的上拉加载和下拉刷新,使用的是一个名为Xlistview的控件,已经有写好的包 我们直接导入自己的工程就好
这个是主mainactivity里面的代码,主要是初始化xlistview的控件,给xlistview控件设置监听,实现其接口中的两个方法,加载和刷新方法,一般就是我们所写的在网络请求数据的方法
package com.example.xlistviewtest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.com.cctest.view.XListView;
import org.com.cctest.view.XListView.IXListViewListener;
import android.app.Activity;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.widget.ArrayAdapter;
public class MainActivity extends Activity {
private List<String> list;
int j;
private ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setData();
final XListView xListView = (XListView) findViewById(R.id.xListView);
// 激活加载更多
xListView.setPullLoadEnable(true);
// 激活下拉刷新
xListView.setPullRefreshEnable(true);
// 设置xlistView上拉加载下拉刷新的监听
xListView.setXListViewListener(new IXListViewListener() {
@Override
// 下拉刷新的回调方法
public void onRefresh() {
// 下拉刷新,应该展示最新数据,所以清空集合
list.clear();
for (int i = 0; i < 5; i++) {
list.add("下拉刷新" + (j += 1));
}
arrayAdapter.notifyDataSetChanged();
//设置刷新时间
xListView.setRefreshTime(dateFormat());
//停止加载更多
xListView.stopLoadMore();
//停止刷新
xListView.stopRefresh();
}
@Override
// //上拉加载的回调方法
public void onLoadMore() {
for (int i = 0; i < 5; i++) {
list.add("上拉加载" + (j += 1));
}
arrayAdapter.notifyDataSetChanged();
//停止加载更多
xListView.stopLoadMore();
//停止刷新
xListView.stopRefresh();
}
});
arrayAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, list);
xListView.setAdapter(arrayAdapter);
}
/**
* 格式化毫秒值
*
* @return
*/
private String dateFormat() {
long currentTimeMillis = System.currentTimeMillis();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String format = dateFormat.format(currentTimeMillis);
return format;
}
private void setData() {
list = new ArrayList<>();
list.add("aaaaa");
list.add("bbbbb");
list.add("cccc");
list.add("ddddd");
list.add("eeee");
list.add("fffff");
list.add("gggg");
list.add("hhhhh");
list.add("iiiii");
}
}
下面两个是listview的头部和足部 每个listview都有这两个类 里面主要是重新的一些方法 我们直接类.方法名就可以操作 大家可以看一下里面的方法
/**
* @file XListView.java
* @package me.maxwin.view
* @create Mar 18, 2012 6:28:41 PM
* @author Maxwin
* @description An ListView support (a) Pull down to refresh, (b) Pull up to load more.
* Implement IXListViewListener, and see stopRefresh() / stopLoadMore().
*/
package org.com.cctest.view;
import com.example.xlistviewtest.R;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.animation.DecelerateInterpolator;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Scroller;
import android.widget.TextView;
public class XListView extends ListView implements OnScrollListener {
private float mLastY = -1; // save event y
private Scroller mScroller; // used for scroll back
private OnScrollListener mScrollListener; // user's scroll listener
// the interface to trigger refresh and load more.
private IXListViewListener mListViewListener;
// -- header view
private XListViewHeader mHeaderView;
// header view content, use it to calculate the Header's height. And hide it
// when disable pull refresh.
private RelativeLayout mHeaderViewContent;
private TextView mHeaderTimeView;
private int mHeaderViewHeight; // header view's height
private boolean mEnablePullRefresh = true;
private boolean mPullRefreshing = false; // is refreashing.
// -- footer view
private XListViewFooter mFooterView;
private boolean mEnablePullLoad;
private boolean mPullLoading;
private boolean mIsFooterReady = false;
// total list items, used to detect is at the bottom of listview.
private int mTotalItemCount;
// for mScroller, scroll back from header or footer.
private int mScrollBack;
private final static int SCROLLBACK_HEADER = 0;
private final static int SCROLLBACK_FOOTER = 1;
private final static int SCROLL_DURATION = 400; // scroll back duration
private final static int PULL_LOAD_MORE_DELTA = 50; // when pull up >= 50px
// at bottom, trigger
// load more.
private final static float OFFSET_RADIO = 1.8f; // support iOS like pull
// feature.
/**
* @param context
*/
public XListView(Context context) {
super(context);
initWithContext(context);
}
public XListView(Context context, AttributeSet attrs) {
super(context, attrs);
initWithContext(context);
}
public XListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initWithContext(context);
}
private void initWithContext(Context context) {
mScroller = new Scroller(context, new DecelerateInterpolator());
// XListView need the scroll event, and it will dispatch the event to
// user's listener (as a proxy).
super.setOnScrollListener(this);
// init header view
mHeaderView = new XListViewHeader(context);
mHeaderViewContent = (RelativeLayout) mHeaderView
.findViewById(R.id.xlistview_header_content);
mHeaderTimeView = (TextView) mHeaderView
.findViewById(R