ListView的下拉刷新功能应该是现在应用最广泛的功能了,手机屏幕毕竟有限,不能同一时间加载所有数据,需要我们及时刷新,而现在下拉刷新功能的实现就会解决这个问题,因此,本博文就ListView的下拉刷新功能的具体实现展开叙述,也将自己已经真机测试通过的代码奉上,当然还有截图啦~~~
我的代码是建立在上篇博文已经实现的ListView的适配基础上进行修改的,注释都有,需要的直接拿走,下边直接上代码啦~~~
MainActivity.java:
package com.example.listviewpushtorefresh;
import java.util.ArrayList;
import java.util.List;
import com.example.listviewpushtorefresh.RefreshListView.IReflashListener;
import bean.Person;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ListView;
public class MainActivity extends Activity implements IReflashListener {
private RefreshListView listview;
MyAdapter adapter;
List<Person> list= new ArrayList<Person>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (RefreshListView) findViewById(R.id.listview);
listview.setInterface(this);
adapter = new MyAdapter(MainActivity.this,0,getData());
listview.setAdapter(adapter);
}
private List<Person> getData() {
// TODO Auto-generated method stub
for(int i=0;i<20;i++)
{
Person p = new Person(R.drawable.ic_launcher,i+"","我是第"+i+"项");
list.add(p);
}
return list;
}
private List<Person> getReflashData() {
// TODO Auto-generated method stub
// List<Person> list= new ArrayList<Person>();
for(int i=0;i<2;i++)
{
Person p = new Person(R.drawable.ic_launcher,i+"","我是第"+i+"项刷新数据");
list.add(i,p);
}
return list;
}
@Override
public void onReflash() {
// TODO Auto-generated method stub
Handler handler = new Handler();
handler.postDelayed(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
//获取最新数据
getReflashData();
//通知界面显示
showList(getReflashData());
//通知listview刷新数据完毕
listview.reflashComplete();
}}, 2000);
}
private void showList(List<Person> objects){
if(adapter == null){
listview.setInterface(this);
adapter=new MyAdapter(MainActivity.this,0,getReflashData());
listview.setAdapter(adapter);
}else{
adapter.onDateChanger(getReflashData());
}
}
}
自定义的RefreshListView,继承于ListView,RefreshListView.java:
package com.example.listviewpushtorefresh;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.RotateAnimation;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
/**
*
* 项目名称:ListViewPushToRefresh
* 类名称:RefreshListView
* 类描述:
* 创建人:dell
* 创建时间:2016年3月3日 下午8:37:56
* 修改人:dell
* 修改时间:2016年3月3日 下午8:37:56
* 修改备注:
* @version
*
*/
public class RefreshListView extends ListView implements OnScrollListener{
private static final int REFRESHING = 0;
View header;//顶部布局文件
int headerHeight;//顶部布局文件的高度
int firstVisibleItem;//当前第一个可见的item的位置
boolean isRemark;//标记,当前是在listview的最顶端摁下的
int startY;//摁下是的Y值
int state;//当前的状态
final int NONE=0;//正常状态
final int PULL=1;//提示下拉状