
我们看了效果图,再看一下实现这个效果需要的代码段,个人觉得使用特别简单,已经在项目中使用了半年了。
final RecyclerView recyclerView = findViewById(R.id.rv_content);
recyclerView.setLayoutManager(new BaseLinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
baseAdapter.setLoadMore(true);
//这里可以自定义加载中&加载错误&没有更多显示的文字
// baseAdapter.setLoadNoMore("没有更多订单了");
baseAdapter.setLoadMoreListener(new BaseAdapter.OnLoadMoreListener() {
@Override
public void onLoadMore() { //上拉更多的回调
page1++;
setmData(page1);
}
@Override
public void onErrorClick() { //当网络请求错误时,可以设置为请求错误,点击重新请求的回调
page1++;
setmData(page1);
}
});
recyclerView.setAdapter(new BaseAdapter<String>(R.layout.item_order_details_goods, mData) { //自定义的apdater,接下来会说
@Override
public void onBindViewHolder(BaseViewHolder holder, ArrayList<String> data, int position) {
holder.setText(R.id.tv_order_details_goods_name, mData.get(position));
}
});
看来代码后,是不是特别简单。平时我们在写列表的时候会重复的做好多事情。有了这个强大的apdater后,我们是不是省了好多事情。详细可以查看我的这篇文章。这次是从这个基础上延申而来。强大的adapter
接下来我们看一下baseadapter里面都实现了什么功能。
一,设置是否支持上拉加载的开关,可以随意切换
/**
* 设置支持加载更多
*
* @param loadMore
*/
public void setLoadMore(boolean loadMore) {
this.isLoadMore = loadMore;
}
二,支持自定义加载过程中的文字展示,比如在订单列表,产品可能要显示《没有更多订单了》而在商品列表,可能又要显示《没有更多商品了》之类的。
/**
* 设置加载更多文本
*
* @param LOAD_MORE
*/
public void setLoadMore(String LOAD_MORE) {
this.LOAD_MORE = LOAD_MORE;
}
/**
* 设置没有更多内容了文本
*
* @param LOAD_NO_MORE
*/
public void setLoadNoMore(String LOAD_NO_MORE) {
this.LOAD_NO_MORE = LOAD_NO_MORE;
}
/**
* 设置加载中文本
*
* @param LOADIND
*/
public void setLoading(String LOADIND) {
this.LOADIND = LOADIND;
}
/**
* 设置加载失败的文本
*
* @param LOAD_ERROR
*/
public void setLoadError(String LOAD_ERROR) {
this.LOAD_ERROR = LOAD_ERROR;
}
三,可以自定义底部加载的布局,一目了然。一看就懂
/**
* 重写此方法可以自定义上拉加载的view
*/
public View onCreateFooterView(ViewGroup parent, int layoutResId) {
return LayoutInflater.from(parent.getContext()).inflate(R.layout.base_adapter_normal_footer, parent, false);
}
四,可以加载多种样式的布局,不会因为使用的新的apdater,而失去了适配器强大的特性
/**
* 重写此方法和onCreateView可实现viewtype功能
*/
public int getViewType(int position) {
return NORMAL_TYPE;
}
/**
* 重写此方法和getViewType可实现viewtype功能
*/
public View onCreateView(ViewGroup parent, int viewType) {
return LayoutInflater.from(parent.getContext()).inflate(layoutResId, parent, false);
}
可能好多人看了第三和第四条之后会模模糊糊,接下来我们看一下这个在哪里调用的,肯定会使你豁然开朗。
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
this.parent = parent;
View view = null;
switch (viewType) {
/*case NORMAL_TYPE:
break;*/
case LOAD_TYPE:
view = onCreateFooterView(parent,R.layout.base_adapter_normal_footer);
break;
default:
view = onCreateView(parent, viewType);
break;
}
return new BaseViewHolder(view);
}
是不是清楚了很多。这样简简单单的一个适配器就做好了。源码可以去我的github去下载希望大家多多提意见。共同进步。我不怎么会写博客,大家见谅。 RecyclerView.BaseAdapter源代码