RecyclerView适配器的封装,针对于要加载数据、没有更多,没有数据的情况的处理
2017-06-09 10:55
429 查看
现在的项目必不可少的就对数据填充适配,网上有很多的文章都有相关的介绍,我就不做详细的说明介绍了。
这个方法就是,针对不同的item做不同的标识,然后根据根据这个标识来选择不同的布局
2、onCreateViewViewHolder(ViewGroup parent,int viewType)
这个方法就是根据view Type的来进行选择不同的ViewHolder,这个和getItemViewType(int position)方法是密切相关的
3、onBindViewHolder(ViewHolder viewHolder,int position)
这个方法是用来对数据进行绑定的
根据项目的需要来定义你所需要的标识
private final int TYPE_ITEM=0;//用于设置要填充数据的标识
private final int TYPE_FOOT=1;//用于数据底部没有数据时要显示ViewHolder的标识
private final int TYPE_LOADING=2;//用于加载更多的数据
private final int TYPE_NODATA=3;//没有获取到数据要显示的View Holder的标识
2、定义不同的ViewHolder
针对于不同的填充数据,TYPE_ITEM可以定义不同的ViewHolder
然后,获取这些TYPE
适配器的封装思路及简单的代码上面已经写的比较清楚了,希望对用到的同学有一些帮助!谢谢大家,不喜勿喷!!!
部分的方法的简单的说明
1、getItemViewType(int position)这个方法就是,针对不同的item做不同的标识,然后根据根据这个标识来选择不同的布局
2、onCreateViewViewHolder(ViewGroup parent,int viewType)
这个方法就是根据view Type的来进行选择不同的ViewHolder,这个和getItemViewType(int position)方法是密切相关的
3、onBindViewHolder(ViewHolder viewHolder,int position)
这个方法是用来对数据进行绑定的
设置不同的ViewHolder
1、定义标识根据项目的需要来定义你所需要的标识
private final int TYPE_ITEM=0;//用于设置要填充数据的标识
private final int TYPE_FOOT=1;//用于数据底部没有数据时要显示ViewHolder的标识
private final int TYPE_LOADING=2;//用于加载更多的数据
private final int TYPE_NODATA=3;//没有获取到数据要显示的View Holder的标识
2、定义不同的ViewHolder
针对于不同的填充数据,TYPE_ITEM可以定义不同的ViewHolder
class PersonViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.tv_name) TextView tv_name; @BindView(R.id.item_evidence) TextView tv_phone; public EvidenceViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } }对于其他的公共需要的就单独的定义
//加载数据 public static class LoadingViewHolder extends RecyclerView.ViewHolder { public LoadingViewHolder(View itemView) { super(itemView); } } //定义没有数据时要显示的 public static class NoDataViewHolder extends RecyclerView.ViewHolder{ public NoDataViewHolder(View itemView) { super(itemView); } } //定义底部没有更多数据的 public static class FooterViewHolder extends RecyclerView.ViewHolder { public FooterViewHolder(View itemView) { super(itemView); } } 下一步就是根据不同的标识创建不同ViewHolder
if (viewType == TYPE_ITEM) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_person, parent, false); return new PersonViewHolder(view); } else if (viewType == TYPE_FOOTER) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.footer, null); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); return new FooterViewHolder(view); } else if (viewType == TYPE_LOADING) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.no_more_layout, null); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); return n 4000 ew LOADINGViewHolder(view); } else { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.no_data_layout, null); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); return new NoDataViewHolder(view); }现在我们需要的东西我们已经定义好了下一步就要判断什么时候设置什么标识下面定义几个函数
public void setNoData(boolean b) { this.mNoData = b; } public void setLoading(boolean b) { this.mLoading = b; } public void setFoot(boolean b){ this.mFoot=b; }这些设置根据请求然后来设置
然后,获取这些TYPE
public int getItemViewType(int position) { if (position + 1 == getItemCount()) { if (this.mLoading) { return TYPE_LOADING; } else if (this.mFooter) { return TYPE_FOOTER; } else { return TYPE_NODATA; } } else { return TYPE_ITEM; } }但是我们要注意一下getItemCount(),现在就不是但是的lists.size()了,这里要注意
if (mFooter || mNomore || mNoData) { return lists.size() + 1; } else { return lists.size(); }剩下的就要在获取数据后处理了,什么时候设置什么就要看数据了!
适配器的封装思路及简单的代码上面已经写的比较清楚了,希望对用到的同学有一些帮助!谢谢大家,不喜勿喷!!!
相关文章推荐
- 在Android Studio上使用GSON+VOLLEY,秒处理网络数据成集合。感受框架的力量。搭配RecyclerView和SwipeRefreshLayout,实现底端加载更多,下拉刷新。
- SwipeRefreshLayout配合RecyclerView实现下拉刷新和上拉加载更多以及没有数据的显示
- 【recyclerview封装】recycleview上拉加载 下拉刷新,加载更多,适配器全面封装。
- SwipeRefreshLayout配合RecyclerView实现下拉刷新和上拉加载更多以及没有数据的显示
- UITableView加载数据,没有数据,没有网络界面处理
- RecyclerView的通用适配器,和滚动时不加载图片的封装
- 实战MVP请求数据OKHttp封装RecyclerView上拉刷新下拉加载
- 使用RecyclerView和SwipeRefreshLayout 配合在下拉刷新后在快速上拉加载更多。会出现下标越界的情况
- RecyclerView上拉加载更多数据
- 封装RecyclerViewAdapter实现RecyclerView下拉刷新上拉加载更多
- RecyclerView加载更多数据的三种不同的实现方式
- 使用MVP,OKHttp封装类及其拦截器,RecyclerView,SpringView,ImageLoader实现数据的多条目加载
- Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件。一般来讲, view负责把数据展示给用户,也处理用户的输入。为了获得更多的灵性性,交互通过d
- recyclerview的数据刷新(下拉刷新和自动加载更多)以及添加提示语(例如:“数据已加载完毕”)
- RecyclerView封装--添加下拉刷新和上拉加载更多
- 手把手教你编写swipeRefreshLayout+RecylerView+底部加载更多(没有太多的封装,写出适合自己的代码)
- 使用MVP注册登录模块+封装的OKhttp,拦截器+QQ第三方登录+RecyclerView+SpringView上拉加载下拉刷新网络数据
- RecyclerView的下拉刷新数据 与上拉加载更多
- Android RecyclerView 加载更多数据 及 不同类型itemView的使用
- 基于RecyclerView的封装,仿qq侧拉删除效果,实现下拉刷新,上拉加载更多,添加header,添加footer