这里有一个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的个是{},既为空的意思。