有很多控件都可以下拉刷新如,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 ,设置其属性
1 <com.handmark.pulltorefresh.library.PullToRefreshListView 2 android:id="@+id/pull_refresh_list" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:cacheColorHint="#00000000" 6 android:divider="#19000000" 7 android:dividerHeight="0.7dp" 8 android:fadingEdge="none" 9 android:fastScrollEnabled="false" 10 android:footerDividersEnabled="false" 11 android:gravity="center_horizontal" 12 android:headerDividersEnabled="false" 13 android:smoothScrollbar="true" />
b,在代码中 findviewbyid,设置参数
1 void initPullRefreshList(){ 2 mPullRefreshListView = (PullToRefreshListView) tabHost.findViewById(R.id.pull_refresh_list); 3 mPullRefreshListView.setAdapter(adapter); 4 mPullRefreshListView.setPullLabel("pull"); 5 mPullRefreshListView.setReleaseLabel("release"); 6 mPullRefreshListView.setRefreshingLabel("refreshing"); 7 mPullRefreshListView.setLoadingDrawable(context.getResources().getDrawable(R.drawable.pgrsb)); 8 mPullRefreshListView.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener<ListView>() { 9 @Override 10 public void onRefresh(PullToRefreshBase<ListView> refreshView) { 11 RefreshTask t = new RefreshTask(); 12 t.execute(); 13 } 14 }); 15 }
c,注意上面代码中的RefreshTask,自定义它,然后现实它。
1 private class RefreshTask extends AsyncTask<Void, Void, Void>{ 2 @Override 3 protected void onPostExecute(Void result) { 4 super.onPostExecute(result); 5 addSomeTableWeixinItem(); 6 mPullRefreshListView.onRefreshComplete(); 7 } 8 @Override 9 protected Void doInBackground(Void... params) { 10 try { 11 Thread.sleep(2000); 12 } catch (InterruptedException e) { 13 e.printStackTrace(); 14 } 15 return null; 16 } 17 18 }
注意 mPullRefreshListView.onRefreshComplete(); 它是关闭显示pulltorefreshview.
最终运行如下: