PullToRefresh是一套非常实用的下拉刷新库,支持ListView,ExpandableListView,GridView和WebView。
实例一:
- public class LocalListActivity extends AppCompatActivity {
- private PullToRefreshListView mPullLv;
- private LinkedList<String>itemLists;
- private ArrayAdapter<String>adapter;
- Handler hander = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- adapter.notifyDataSetChanged();
- //设置加载完成后,取消加载的进度条
- mPullLv.onRefreshComplete();
- }
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_local_list);
- mPullLv = (PullToRefreshListView) findViewById(R.id.pull_lv);
- itemLists = new LinkedList<>();
- initData();
- //设置加载的模式
- mPullLv.setMode(PullToRefreshBase.Mode.BOTH);
- //设置刷新的监听器
- mPullLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
- //下拉刷新时会回调的方法
- @Override
- public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
- itemLists.clear();
- loadData();;
- hander.sendEmptyMessageDelayed(1,2000);
- }
- //上啦加载时执行的方法
- @Override
- public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
- //模拟耗时操作
- new Thread(){
- @Override
- public void run() {
- super.run();
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- loadData();
- hander.sendEmptyMessage(1);
- }
- }.start();
- }
- });
- }
- /**
- * 初始化数据
- * */
- private void initData(){
- for (int i = 0; i < 20; i++) {
- itemLists.add("第"+i+"条数据");
- }
- adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,itemLists);
- mPullLv.setAdapter(adapter);
- }
- //加载数据
- private void loadData(){
- int itemSize = itemLists.size();
- for (int i = 0; i < 20; i++) {
- itemLists.add("第"+(itemSize+i)+"条数据");
- }
- }
- }
- <com.handmark.pulltorefresh.library.PullToRefreshListView
- android:id="@+id/pull_lv"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- </com.handmark.pulltorefresh.library.PullToRefreshListView>
对于GridView的使用:
- public class LocalGridActivity extends AppCompatActivity {
- private PullToRefreshGridView mPullGv;
- private LinkedList<String>list;
- private ArrayAdapter<String>adapter;
- private int index = 0;
- private int lastIndex = 0;
- Handler handler = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- adapter.notifyDataSetChanged();
- mPullGv.onRefreshComplete();
- }
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_local_grid);
- mPullGv = (PullToRefreshGridView) findViewById(R.id.pull_gv);
- list = new LinkedList<>();
- initData();
- lastIndex = list.size();
- adapter = new ArrayAdapter<String>(this,R.layout.item_gv_local,R.id.id_item_tv,list);
- mPullGv.setAdapter(adapter);
- //设置模式
- mPullGv.setMode(PullToRefreshBase.Mode.BOTH);
- //设置刷新监听器
- mPullGv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<GridView>() {
- @Override
- public void onPullDownToRefresh(PullToRefreshBase<GridView> refreshView) {
- //怎么获取下拉刷新的时间。
- String label = DateUtils.formatDateTime(getApplicationContext(),System.currentTimeMillis(),
- DateUtils.FORMAT_ABBREV_ALL|DateUtils.FORMAT_SHOW_DATE|DateUtils.FORMAT_SHOW_TIME);
- mPullGv.getLoadingLayoutProxy().setLastUpdatedLabel(label);
- index--;
- list.addFirst(index+"");
- handler.sendEmptyMessageDelayed(1,2000);
- }
- @Override
- public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) {
- list.add(lastIndex+"");
- lastIndex++;
- handler.sendEmptyMessageDelayed(1,2000);
- }
- });
- }
- private void initData(){
- for (int i = 0; i < 30; i++) {
- list.add(i+"");
- }
- }
- }
- <com.handmark.pulltorefresh.library.PullToRefreshGridView
- android:id="@+id/pull_gv"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:numColumns ="2" >
- </com.handmark.pulltorefresh.library.PullToRefreshGridView>
PullToRefreshListView调用onRefreshComplete方法 无法取消刷新的bug:
PullToRefreshListView 实现下拉或者上拉加载时候,可能在上拉 完成时候,调用onRefreshComplete方法去
停止 刷新操作,但是,可能无效,测试产生原因,刷新获取数据时候,时间太短,就会出现该问题
我们可以 延迟 1秒左右,在调用onRefreshComplete 方法,可以解决该问题
mListView.postDelayed(new Runnable() {
@Override
public void run() {
mListView.onRefreshComplete();
}
}, 1000);
记得是在 setadpter后面执行,不然 无效