PullToRefreshListView實現上拉和下拉刷新有兩個步驟:
1、設置刷新方式
pullToRefreshView.setMode(PullToRefreshBase.Mode.BOTH);//兩端刷新 pullToRefreshView.setMode(PullToRefreshBase.Mode.PULL_FROM_START);//上拉刷新 pullToRefreshView.setMode(PullToRefreshBase.Mode.PULL_FROM_END);//下拉刷新
2、如果是上拉刷新或者下拉刷新需要實現OnRefreshListener接口;如果是兩端刷新,則setOnRefreshListener需要實現OnRefreshListener2接口
兩端刷新實現:
pullToRefreshView = (PullToRefreshListView) view.findViewById(R.id.pull_to_refresh_listview); pullToRefreshView.setMode(PullToRefreshBase.Mode.BOTH);//兩端刷新 // pullToRefreshView.setMode(PullToRefreshBase.Mode.PULL_FROM_START);//上拉刷新 // pullToRefreshView.setMode(PullToRefreshBase.Mode.PULL_FROM_END);//下拉刷新 pullToRefreshView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { refreshType = REFRESH_TYPE_DOWN; refreshView.getLoadingLayoutProxy().setRefreshingLabel("正在加載"); refreshView.getLoadingLayoutProxy().setPullLabel("下拉加載更多"); refreshView.getLoadingLayoutProxy().setReleaseLabel("釋放開始加載"); // refreshView.getLoadingLayoutProxy().setLastUpdatedLabel("最后加載時間:"); // Do work to refresh the list here. new GetDataTask().execute(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { refreshType = REFRESH_TYPE_UP; refreshView.getLoadingLayoutProxy().setRefreshingLabel("正在加載"); refreshView.getLoadingLayoutProxy().setPullLabel("上拉加載更多"); refreshView.getLoadingLayoutProxy().setReleaseLabel("釋放開始加載"); // refreshView.getLoadingLayoutProxy().setLastUpdatedLabel("最后加載時間:"); // Do work to refresh the list here. new GetDataTask().execute(); } });
AsyncTask實現異步加載
private class GetDataTask extends AsyncTask<Void, Void, String[]> { @Override protected String[] doInBackground(Void... params) { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return new String[0]; } @Override protected void onPostExecute(String[] result) { // Call onRefreshComplete when the list has been refreshed. pullToRefreshView.onRefreshComplete(); if(REFRESH_TYPE_DOWN == refreshType){ Article article = new Article(); article.setTitle("下拉刷新添加title"); adapter.insert(article,0);//adapter是一個LinkedList }else if(REFRESH_TYPE_UP == refreshType){ Article article = new Article(); article.setTitle("上拉刷新添加title"); adapter.add(article); } super.onPostExecute(result); } }
如果想實現更豐富的效果可修改布局文件參數,如:
<!-- ptr:ptrDrawable="@drawable/default_ptr_flip" ptr:ptrAnimationStyle="flip" flip:翻轉 rotate:旋轉 --> <!-- ptr:ptrShowIndicator="true" 右上角 右下角出現箭頭--> <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/pull_to_refresh_listview" android:layout_height="fill_parent" android:layout_width="fill_parent" ptr:ptrShowIndicator="true" android:background="#CCC" />