android 实现下拉刷新有很多开源的源码可以用 比如 :PullToRefreshListView 使用起来也很方便
现在还可以直接使用google libs下面的 android-support-v4.jar 这个包来实现了,请更新你的sdk到最新
使用 xml 布局
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listview"
></ListView>
</android.support.v4.widget.SwipeRefreshLayout>
最外层是 android.support.v4包里面的一个类 SwipeRefreshLayout ,在它里面放入任意view控件就行了。
代码里面:
package com.hck.swiperefreshlayout;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private SwipeRefreshLayout refreshLayout; //下拉刷新控件
private ListView listView;
private ArrayAdapter
adapter;
private boolean isResh;
List
dateList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dateList = new ArrayList
();
initView();
setListener();
initUi();
}
private void initView() {
refreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresh);
//刷新顶部有个貌似progress的东西,可以设置它的颜色,如下
refreshLayout.setColorScheme(R.color.gree, R.color.red,R.color.yellow, R.color.black);
listView=(ListView) findViewById(R.id.listview);
}
private void setListener() {
//为SwipeRefreshLayout绑定下拉监听事件
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh() { // 下拉后会执行这里进行 你自己的相关操作了 比如联网获取数据什么的
Toast.makeText(MainActivity.this, "开始刷新", Toast.LENGTH_LONG).show();
new Handler().postDelayed(new Runnable() { //模拟网络请求数据 5秒后更新数据
@Override
public void run() {
Toast.makeText(MainActivity.this, "刷新成功", Toast.LENGTH_LONG).show();
refreshLayout.setRefreshing(false); //停止顶部那个progress
isResh=isResh==true?false:true;
if (isResh) {
updateUi();
}
else {
initUi();
}
}
}, 5000);
}
});
}
private void initUi() {
if (dateList!=null) {
dateList.clear();
}
dateList.add("呵呵呵");
dateList.add("呵呵呵333");
dateList.add("呵呵呵eee");
dateList.add("呵呵呵666");
dateList.add("呵呵呵7777");
adapter = new ArrayAdapter
(this,
android.R.layout.simple_list_item_1, dateList);
listView.setAdapter(adapter);
}
private void updateUi() {
if (dateList!=null) {
dateList.clear();
}
dateList.add("你好刷新111111");
dateList.add("你好刷新22222");
dateList.add("你好刷新333333");
dateList.add("你好刷新444444");
dateList.add("你好刷新5555555");
adapter = new ArrayAdapter
(this, android.R.layout.simple_list_item_1, dateList); listView.setAdapter(adapter); } }
SwipeRefreshLayout 具体的方法,大家看看api文档
项目里面的 android-support-v4.jar 可能没有SwipeRefreshLayout这个类,我已上传上来了,可以到这里下载