SuperRecyclerView配合RecyclerArrayAdapter和BaseViewHolder的使用

这里有一个github地址,别人写的SuperCyclerView库:https://github.com/llxdaxia/SuperRecyclerView
然后我同学(大神),再一次对RcyclerView的ViewHolder和Adapter进行的功能的添加和封装,然后有了RecyclerArrayAdapter和BaseViewHolder,可惜没有github地址。
这里有许多需要注意的地方:

/**
     * SuperRecyclerView的适配器,注意: holder.setData(getItem(position));
     * 这里调用的方法是getItem()这个方法来获取数据源(这里也是应该必须这样去写)
     */
    class PhotoRecyclerViewAdapter extends RecyclerArrayAdapter{

        public PhotoRecyclerViewAdapter(Context context){
            super(context);
        }

        @Override
        public BaseViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) {
            return new PhotoViewHolder(parent);
        }

        @Override
        public void OnBindViewHolder(BaseViewHolder holder, int position) {
            holder.setData(getItem(position));
        }
    }
/**
     * adapter的ViewHolder.注意:这里的泛型BaseViewHolder<NetPhotoInfo.ImgInfo>应该必须写上,
     * 不然setData()的时候getItem(position),找不到对应的类型
     */
class PhotoRecyclerViewAdapter extends RecyclerArrayAdapter{

        public PhotoRecyclerViewAdapter(Context context){
            super(context);
        }

        public PhotoRecyclerViewAdapter(Context context, List objects) {
            super(context, objects);
        }

        @Override
        public BaseViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) {
            return new PhotoViewHolder(parent);
        }

        @Override
        public void OnBindViewHolder(BaseViewHolder holder, int position) {
            holder.setData(getItem(position));
        }
    }
 /**
     * 加载更多的数据SuperRecyclerView的监听器,注意:调用的RecyclerArrayAdapter已经封装了page这个参数,
     * 就是加载更多数据时候请求的次数或者说是页数(page),调用RecyclerArrayAdapter.getPage()获得当前页数
     */
    class MyOnMoreListener implements OnMoreListener{

        @Override
        public void onMoreAsked(int i, int i1, int i2) {
            getPhotoUrl(adapter.getPage()+1,false);
        }
    }
/**
     * 刷新数据监听器
     */
    class MyOnRefreshListener implements SwipeRefreshLayout.OnRefreshListener{
        @Override
        public void onRefresh() {
            getPhotoUrl(0,true);
        }
    }
/**
     *请求数据源
     * @param page 请求的页数
     * @param clear 是否清理adapter的数据,如果是刷新应该true,如果是加载更多应该false
     */
    public void getPhotoUrl(int page,final boolean clear){
        intent=getIntent();
        String keyword=intent.getStringExtra("keyword");
        HashMap<String,String> params=new HashMap();
        params.put("tn","resultjson_com");
        params.put("word",keyword);
        params.put("rn","20");
        params.put("pn",page*20+"");
        PhotoInfoModel.getPhotoForNet(API.photoUrl, params, new OnDataCallback<NetPhotoInfo.ImgInfo>() {
            @Override
            public void onCallback(NetPhotoInfo.ImgInfo... list) {
                infoList= Arrays.asList(list);
                recyclerView.hideMoreProgress();
                recyclerView.showRecycler();
                if(clear){
                    adapter.clear();
                }
                adapter.addAll(infoList);
            }
        });
    }

百度搜索图片接口:http://image.baidu.com/i?&tn=resultjson_com&pn=0&word=%C0%B2%C0%B2%C0%B2&rn=20
这里我说明一下这些参数的意思:pn这应该是pagenum的缩写,图片的起始位置,rn表示没次请求返回到图片数量(这里是20张)
注意:这里虽然是没次请求20张,但是实际操作中我发现返回的json数组总是比设置的rn多一个,这里也就是21个图片,然而这其实是假象,因为最后一个,也就是第21的个是{},既为空的意思。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值