有很多控件都可以下拉刷新如,ListView,ExpandableListView,GridView,ScrollView,ViewPager,WebView等,
其中最常见的是ListView。本文以实现ListView为例,其它类似。
使用Android-PullToRefresh
地址:
https://github.com/chrisbanes/Android-PullToRefresh
优点:
里面有很多示例代码。使用简单。它里面含的PullToRefresh如下:
缺点:
样式不可定义麻烦,如 PullToRefreshListview 只显示一张图片,不是 [下箭头---上箭头---刷新] 那类常见的样式,更改成那样很麻烦,而是PullToRefreshScrollView是[下箭头---上箭头---刷新] 那类。
下拉上拉 图标和文字 位置改动是在PullToRefresh源代码中改的即:PullToRefreshListView.handleStyledAttributes 中lp的Gravity改为CENTER_VERTICAL
如果想要改动图标和文字的距离和布局 在这library项目下这两个文件改
- pull_to_refresh_header_horizontal.xml
- pull_to_refresh_header_vertical.xml
PullToRefreshList示例 :
下面以PullToRefreshListView为例:
a,在layout中添加 pulltorefreshview ,设置其属性
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pull_refresh_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:divider="#19000000"
android:dividerHeight="0.7dp"
android:fadingEdge="none"
android:fastScrollEnabled="false"
android:footerDividersEnabled="false"
android:gravity="center_horizontal"
android:headerDividersEnabled="false"
android:smoothScrollbar="true" />
b,在代码中 findviewbyid,设置参数
void initPullRefreshList(){
mPullRefreshListView = (PullToRefreshListView) tabHost.findViewById(R.id.pull_refresh_list);
mPullRefreshListView.setAdapter(adapter);
mPullRefreshListView.setPullLabel("pull");
mPullRefreshListView.setReleaseLabel("release");
mPullRefreshListView.setRefreshingLabel("refreshing");
mPullRefreshListView.setLoadingDrawable(context.getResources().getDrawable(R.drawable.pgrsb));
mPullRefreshListView.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
RefreshTask t = new RefreshTask();
t.execute();
}
});
}
c,注意上面代码中的RefreshTask,自定义它,然后现实它。
private class RefreshTask extends AsyncTask<Void, Void, Void>{
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
addSomeTableWeixinItem();
mPullRefreshListView.onRefreshComplete();
}
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
} }
注意 mPullRefreshListView.onRefreshComplete(); 它是关闭显示pulltorefreshview.
最终运行如下: