PullToRefreshListView的简单使用和数据的展示++++最后拓展一下轮播加载到PullToRefreshListView的控件上

(一)

首先导入相关的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);

猜你喜欢

转载自blog.csdn.net/H_BuilDer/article/details/81710994