Android-PullToRefresh下拉刷新步骤
1 导入第三方插件库
Android-PullToRefresh-master.zip
2 在布局文件中使用第三方插件
com.handmark.pulltorefresh.library.PullToRefreshListView
3 给PullToRefreshListView控件设置相关属性
plv_main_1.setMode(Mode.BOTH);// 设置刷新模式
Mode.BOTH:同时支持上拉下拉
Mode.PULL_FROM_START:只支持下拉Pulling Down
Mode.PULL_FROM_END:只支持上拉Pulling Up
plv_main_1.getLoadingLayoutProxy().setPullLabel("上拉刷
新…");// 刚下拉时,显示的提
plv_main_1.getLoadingLayoutProxy().setRefreshingLabel("正在载
入…");// 刷新时
plv_main_1.getLoadingLayoutProxy().setReleaseLabel("放开刷
新…");// 下来达到一定距离时,显示的提示
4,给该控件添加刷新的监听事件,执行异步操作
lv_main_booklist.setOnRefreshListener(new
PullToRefreshBase.OnRefreshListener() {
@Override//6.给该控件添加刷新的监听事件
public void onRefresh(PullToRefreshBase
refreshView) {
new myAsyncTask().execute();//执行异步操作
}
});
5获取控件,自定义适配器(BaseAdapter)提供数据
6 异步任务查询数据(AsyncTask)
2.5.1 AsyncTask定义了三种泛型类型 Params,Progress和Result。
Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String
2.6.2 异步加载数据最少要重写以下这两个方法
2.6.2.1 doInBackground(Params…)请求数据 后台执行,比较
耗时的操作都可以放在这里
2.6.2.2 onPostExecute(Result) 去回调,通知展示数据已发生改
变.
–注:此方法中再通知适配器和控件
myBaseAdapter.notifyDataSetChanged();// 通知适配器数据已
改变
plv_main_plv1.onRefreshComplete();// 通知控件数据已经加
载完毕
参考代码如下:
activity_main.xml
MainActivity .java
package com.example.administrator.number2;
import android.content.Context;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List data=new ArrayList<>();
private MyBaseAdapter adapter;
private PullToRefreshListView lv_main_booklist;//2.获取控件
int page=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_main_booklist=findViewById(R.id.lv_main_booklist);
lv_main_booklist.setMode(PullToRefreshBase.Mode.PULL_FROM_END);//3.设置刷新模式
lv_main_booklist.getLoadingLayoutProxy().setPullLabel("上拉刷新...");//刚下拉时,显示的提
lv_main_booklist.getLoadingLayoutProxy().setRefreshingLabel("正在载 入...");// 刷新时
lv_main_booklist.getLoadingLayoutProxy().setReleaseLabel("放开刷 新...");// 下来达到一定距离时,显示的提示
lv_main_booklist.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener() {
@Override //4.给该控件添加刷新的监听事件
public void onRefresh(PullToRefreshBase refreshView) {
new myAsyncTask().execute();//执行异步操作
}
});
this.data=new BookDao().list(page);
adapter=new MyBaseAdapter((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE));
lv_main_booklist.setAdapter(adapter);
}
//5.自定义适配器(BaseAdapter)提供数据
public class MyBaseAdapter extends BaseAdapter{
public class ViewHolder{//专门用来保存控件
ImageView iv_listviewitem_image;
TextView tv_listviewitem_title;
TextView tv_listviewitem_author;
TextView tv_listviewitem_price;
TextView tv_listviewitem_publishing;
TextView tv_listviewitem_remark;
}
private LayoutInflater inflater;//解析器
public MyBaseAdapter(LayoutInflater inflater) {
this.inflater = inflater;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int i) {
return data.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup parent) {
//被遮挡住的视图 View view
//1,将项资源解析成可见的视图
View v=view;
if(v==null){//增强一 减少视图的创建
Log.i("test","position:"+i);
v=inflater.inflate(R.layout.listview_item,null);
ViewHolder vh=new ViewHolder();//增强二 减少查找控件的时间
vh.iv_listviewitem_image=v.findViewById(R.id.iv_listviewitem_image);
vh.tv_listviewitem_title=v.findViewById(R.id.tv_listviewitme_title);
vh.tv_listviewitem_author=v.findViewById(R.id.tv_listviewitme_author);
vh.tv_listviewitem_price=v.findViewById(R.id.tv_listviewitme_price);
vh.tv_listviewitem_publishing=v.findViewById(R.id.tv_listviewitme_publish);
vh.tv_listviewitem_remark=v.findViewById(R.id.tv_listviewitme_remark);
v.setTag(vh);//保存
}
//2,从视图中获取控件(控件无值) //增强二 减少查找控件的时间(将控件放进ViewHolder类,专门保存控件)
ViewHolder viewHolder=(ViewHolder)v.getTag();
// 3,获取当前需要的数据,将值封装进控件中
Book book=data.get(i);
viewHolder.iv_listviewitem_image.setImageResource(book.getImage());
viewHolder.tv_listviewitem_title.setText(book.getTitle());
viewHolder.tv_listviewitem_author.setText(book.getAuthor());
viewHolder.tv_listviewitem_price.setText(book.getPrice()+"");
viewHolder.tv_listviewitem_publishing.setText(book.getPublish());
viewHolder.tv_listviewitem_remark.setText(book.getRemark());
//将视图返回
return v;
}
}
public class myAsyncTask extends AsyncTask{//6.获取数据(发异步请求)
@Override
protected Object doInBackground(Object[] objects) {//6.1请求数据
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
data.addAll(new BookDao().list(page++));
return null;
}
@Override
protected void onPostExecute(Object o) {//6.2.在异步任务中,去回调,通知展示数据已发生改变.
super.onPostExecute(o);
adapter.notifyDataSetChanged();// 通知适配器数据已改变
lv_main_booklist.onRefreshComplete();// 通知控件数据已经加载完毕
}
}
}