ListView是在app中使用最多的组件,下拉刷新和上拉加载更多已经成了列表页的标准了,然而google并没有提供这样的功能,只能自定义或者使用第三方开源组件。这里介绍一下XlistView,在源生ListView上进行修改增加上拉和下拉功能的开源组件。
效果图如下:
下载地址:
XListView-Android下载地址
使用方法:
下载库文件,引入工程并关联自己项目。
在自己项目的布局文件中把ListView修改为me.maxwin.view.XListView,如:
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
改为:
<me.maxwin.view.XListView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
在代码中,设置是否需要下拉刷新和上拉加载功能:
XListView listV = (XListView)findViewById(R.id.list_msg);
listV.setPullRefreshEnable(true); //默认为true
listV.setPullLoadEnable(true);
这样就可以运行看看效果了。
接着捕获下拉和上拉事件做相应处理:
listV.setXListViewListener(new IXListViewListener() {
@Override
public void onRefresh() {
// TODO Auto-generated method stub
}
@Override
public void onLoadMore() {
// TODO Auto-generated method stub
}
});
在onRefresh()和onLoadMore()中实现页面刷新和加载更多就可以了,记得刷新完毕后,自行调用stopRefresh()和stopLoadMore(),否则进度条会一直旋转无法消失。
例如,模拟加载的效果:
@Override
public void onRefresh() {
mHandler.postDelayed(new Runnable(){
@Override
public void run(){
adapter.getResults().clear();
loadData(adapter.getResults());
adapter.notifyDataSetChanged();
listV.stopRefresh();
}
}, 1000);
}
@Override
public void onLoadMore() {
mHandler.postDelayed(new Runnable(){
@Override
public void run(){
adapter.getResults().add(new TestPojo("item1"));
adapter.getResults().add(new TestPojo("item2"));
adapter.getResults().add(new TestPojo("item3"));
adapter.notifyDataSetChanged();
listV.stopLoadMore();
}
}, 1000);
}
另外,补充一下XListView的布局高度,推荐设置为 match_parent
<me.maxwin.view.XListView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
如果设置为自适应的话,会导致控件在上拉下拉的时候不断计算高度,最终导致拉动很卡,不知道这算不算一个bug,或者说一个待优化项吧,有兴趣的可以自己看看源码修改一下。