(一)
首先导入相关的Module包或者添加依赖
(二)布局
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pull_to_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.handmark.pulltorefresh.library.PullToRefreshListView>
(三)Activity中onCreate里面
//设置支持上拉下拉
pull_to_refresh.setMode(PullToRefreshBase.Mode.BOTH);
//设置上拉下拉的监听
pull_to_refresh.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
page=1;
loadData();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
page+=1;
loadData();
}
});
// 设置一个空的adpater , 去请求网络数据, 当网络数据回来后添加到数据集合中, 刷新adapter
resultsBeanList = new ArrayList<>();
adapter = new PullToRefreshAdaper(this, resultsBeanList);
pull_to_refresh.setAdapter(adapter);
//请求数据并在list中展示---调用写好的网络工具类获得返回的数据
instance = Utils.getInstance();
instance.setNetCallback(this);
//调用拼接page的方法
loadData();
private void loadData(){
instance.getDataFromService(url+page);
}
(四)重写onSuccess()方法,在解析的时候考虑页码的改变
@Override
public void onSuccess(String result) {
// 解析并处理数据
Gson gson = new Gson();
GankBean gankBean = gson.fromJson(result, GankBean.class);
// 设置数据并展示----page(改编页码)
if (page == 1) {
resultsBeanList.clear();
}
//加载数据将数据累加到一块
resultsBeanList.addAll(gankBean.getResults());
//刷新适配器
adapter.notifyDataSetChanged();
pull_to_refresh.onRefreshComplete();
}
(五)adapter中和平常listview无任何差别,例如:
public class PullToRefreshAdaper extends BaseAdapter{
private Context context;
private List<GankBean.ResultsBean> resultsBeanList;
public PullToRefreshAdaper(Context context, List<GankBean.ResultsBean> resultsBeanList) {
this.context = context;
this.resultsBeanList = resultsBeanList;
}
@Override
public int getCount() {
return resultsBeanList.size();
}
@Override
public Object getItem(int position) {
return resultsBeanList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
PullViewHodler hodler = null;
if (convertView == null) {
hodler = new PullViewHodler();
convertView = LayoutInflater.from(context).inflate(R.layout.pull_to_refresh_list_item, null, false);
hodler.ivImage = convertView.findViewById(R.id.iv_image);
hodler.tvDate = convertView.findViewById(R.id.tv_date);
convertView.setTag(hodler);
} else {
hodler = (PullViewHodler) convertView.getTag();
}
GankBean.ResultsBean resultsBean = resultsBeanList.get(position);
hodler.tvDate.setText(resultsBean.getPublishedAt());
ImageLoader.getInstance().displayImage(resultsBean.getUrl(), hodler.ivImage);
return convertView;
}
class PullViewHodler {
ImageView ivImage;
TextView tvDate;
}
}
(拓展) -------轮播加载到PullToRefreshListView的控件上
只需要在第(三)步调用loadData()方法后写出无限轮播(具体操作可参考文章《本地图片的无限轮播++++Banner无限轮播》)
然后加载布局,代码如下:
// pull_to_refresh控件得到布局 ListView refreshableView = pull_to_refresh.getRefreshableView(); // 设置HeadView的布局参数 AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 600); headView.setLayoutParams(params); // 添加HeadView refreshableView.addHeaderView(headView);