Android ListView的上拉刷新,下拉加载功能(pull - to -refesh)

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/47749503         最近研究了一下Android ListView的上拉刷新,下拉加载功能,采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/47749503

        最近研究了一下Android ListView的上拉刷新,下拉加载功能,采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库。目前他支持的控件有:ListView, ExpandableListView,GridView,WebView等。把自己的学习过程记录一下:

步骤:

1.从github下载:Android-PullToRefresh的库文件,导入到项目中(下载地址:https://github.com/chrisbanes/Android-PullToRefresh)。

2、要实现下拉刷新的功能很简单,


下面是个例子采用的是ListView,

1、布局文件activity_main.xml

01 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
02     xmlns:tools="http://schemas.android.com/tools"
03     android:layout_width="match_parent"
04     android:layout_height="match_parent"
05     tools:context=".MainActivity" >
06  
07       <com.handmark.pulltorefresh.library.PullToRefreshListView
08         android:id="@+id/pull_refresh_list"
09         android:layout_width="fill_parent"
10         android:layout_height="fill_parent" />
11 </RelativeLayout>
2.Activity中的设置:

package com.handmark.pulltorefresh.samples;


import java.util.Arrays;
import java.util.LinkedList;


import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnLastItemVisibleListener;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;
import com.handmark.pulltorefresh.library.PullToRefreshListView;


import android.app.ListActivity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;


public class MainActivityLoadMore extends ListActivity {


private PullToRefreshListView mPullToRefreshListView;

private LinkedList<String> mItemList;
private ArrayAdapter<String> adapter;

private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
initData();//初始化数据

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mItemList);

//初始化控件
mPullToRefreshListView = (PullToRefreshListView)findViewById(R.id.pull_refresh_list);
ListView mListView = mPullToRefreshListView.getRefreshableView();
mListView.setAdapter(adapter);

//设置pull-to-refresh模式为Mode.Both
mPullToRefreshListView.setMode(Mode.BOTH);//设置为双向的

mPullToRefreshListView.setOnRefreshListener(new OnRefreshListener2<ListView>() {


@Override
public void onPullDownToRefresh(//下拉时回调的方法
PullToRefreshBase<ListView> refreshView) {

Toast.makeText(MainActivityLoadMore.this, "Pull Down!", Toast.LENGTH_SHORT).show();
new GetDataTask().execute();
}


@Override
public void onPullUpToRefresh(//上拉时回调的方法
PullToRefreshBase<ListView> refreshView) {
Toast.makeText(MainActivityLoadMore.this, "Pull Up!", Toast.LENGTH_SHORT).show();
new GetDataTask().execute();
}



});

mPullToRefreshListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {


@Override
public void onLastItemVisible() {
}
});
}




private void initData(){
//初始化数据
mItemList = new LinkedList<String>();
mItemList.addAll(Arrays.asList(data));

}

private class GetDataTask extends AsyncTask<Void, Void, String[]> {


@Override
protected String[] doInBackground(Void... params) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String[] data  = getData();
return data;
}


@Override
protected void onPostExecute(String[] result) {
mItemList.addAll(Arrays.asList(result));
adapter.notifyDataSetChanged();


// Call onRefreshComplete when the list has been refreshed.
//当list已经完成刷新,调用该方法
mPullToRefreshListView.onRefreshComplete();


super.onPostExecute(result);
}
}


private String[] data  = new String[]{"data1","data2","data3","data4","data5","data6",
"data1","data2","data3","data4","data5","data6"};


    public String[]  getData() {
    String[]  mItem = new String[10];
    for (int i = 0; i < 10; i++) {
    mItem[i]="object"+i+"";
}
return mItem;
}
 }


效果图:

相关文章
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
96 0
|
3月前
|
API Android开发 开发者
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
31 2
|
3月前
|
安全 Linux Android开发
Android 安全功能
Android 安全功能
37 0
|
4月前
|
XML 前端开发 Java
Android App实战项目之实现手写签名APP功能(附源码,简单易懂 可直接实用)
Android App实战项目之实现手写签名APP功能(附源码,简单易懂 可直接实用)
45 0
|
4月前
|
XML Java Android开发
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
81 0
|
4月前
|
传感器 物联网 Android开发
【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
62 1
|
4月前
|
XML Java 定位技术
【Android App】定位导航GPS中开启手机定位功能讲解及实战(附源码和演示 超详细)
【Android App】定位导航GPS中开启手机定位功能讲解及实战(附源码和演示 超详细)
112 0
|
4月前
|
XML 前端开发 Java
【Android App】三维处理中三维投影OpenGL功能的讲解及实战(附源码和演示 超详细必看)
【Android App】三维处理中三维投影OpenGL功能的讲解及实战(附源码和演示 超详细必看)
33 1
|
4月前
|
JSON 语音技术 Android开发
【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)
【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)
34 0
|
4月前
|
JSON Java 语音技术
【Android App】实现在线语音合成功能(使用云知声平台和WebSocket 超详细 附源码)
【Android App】实现在线语音合成功能(使用云知声平台和WebSocket 超详细 附源码)
43 0