项目很多时候都需要做ListView交互,我现在也在做,本想着按着效果图来做就可以了,因为刚到公司不久,业务不是很熟悉,做出来之后,跟效果图一样,拿给产品看,结果他说他忘记考虑大数据的情况下要分页加载,我心中默默的问候了。。。。。。经过一天的考虑,他定下是可以同时上拉刷新和下拉刷新,我在网上各种百度资料,找到支持上拉刷新和下拉刷新源码https://github.com/chrisbanes/Android-PullToRefresh,如果是只要上拉刷新就好实现了,只需要实现AbsListView.OnScrollListener监听滑动事件就可以请求数据分页了,
下载下来之后就将资源,类导入,编译通过之后(其实这个耗费的时间比较长,要剔除多余的代码),看布局代码
`<com.widget.pullreflush.PullToRefreshListView
android:id="@+id/applies_listview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.widget.pullreflush.PullToRefreshListView>`
初始化view
mAppliesListView = (PullToRefreshListView) this.findViewById(R.id.applies_listview);
mAppliesListView.getRefreshableView().setDivider(null);
mAppliesListView.getRefreshableView().setSelector(android.R.color.transparent);
mAppliesListView.setOnRefreshListener(this);//注册监听器
mAppliesListView.getLoadingLayoutProxy(true, false).setLastUpdatedLabel("下拉刷新");
mAppliesListView.getLoadingLayoutProxy(true, false).setPullLabel("");
mAppliesListView.getLoadingLayoutProxy(true, false).setRefreshingLabel("正在刷新");
mAppliesListView.getLoadingLayoutProxy(true, false).setReleaseLabel("放开以刷新");
//上拉加载更多时的提示文本设置
mAppliesListView.getLoadingLayoutProxy(false, true).setLastUpdatedLabel("上拉加载");
mAppliesListView.getLoadingLayoutProxy(false, true).setPullLabel("");
mAppliesListView.getLoadingLayoutProxy(false, true).setRefreshingLabel("正在加载...");
mAppliesListView.getLoadingLayoutProxy(false, true).setReleaseLabel("放开以加载");
mAppliesListView.setMode(PullToRefreshBase.Mode.BOTH);//加上这个是同时支持上拉下拉刷新
在注册监听器之后就可以实现上拉或者下拉刷新该执行的方法
@Override
public void onRefresh(PullToRefreshBase refreshView) {
Log.e("supplies","刷新========================================");
if( mAppliesListView.isRefreshing()){
if(mAppliesListView.isHeaderShown()){//
Log.e("supplies", "下拉刷新========================================");
}else {
Log.e("supplies","上拉刷新========================================");
}
mAppliesListView.onRefreshComplete();
}else {
}
}
PullToRefreshAdapterViewBase.java这个类,加入两个新接口就可以知道是上拉还是下拉了:
public boolean isHeaderShown() {
return getHeaderLayout().isShown();
}
public boolean isFooterShown() {
return getFooterLayout().isShown();
}