Android RecyclerView添加FootView和HeadView
前提概要:
上一篇文章已经介绍过了recyclerview的基本使用方法,原文如下:android recyclerview布局真的只是那么简单!此篇文章算是对recyclerview更深使用的介绍。
footview和headview在listview中的本身就有相对应的函数,但是在新潮的recyclerview中却没有了,footview在分页加载(上拉加载更多)中起着很重要的作用,因此也必须要学习一下了。(headview的添加与footview的添加相比大致一样,在此就只讲footview的添加了)
效果: (源码在文章结尾)
实现关键
int getitemviewtype(int position):此函数是recyclerview中自带的函数,参数为每个item的position,返回一个int类型表示类型。
此函数的作用是区分普通的item与footview的item,让footview这个item能一直处在adapter中的最下端。
在例子中定义了两种类型如下:
//两个final int类型表示viewtype的两种类型 private final int normal_type = 0; private final int foot_type = 1111;
该函数如下:
@override public int getitemviewtype(int position) { if (position == max_count - 1) { return foot_type; } return normal_type; }
实现步骤
1、定义getitemviewtype(int position)并且定义自己所需要的viewtype的类型。
2、在定义viewholder(),oncreateviewholder()和onbindviewholder()中都考虑两种情况,一种是普通的item,另一种是footview。
另外默认的viewholder()函数中只会有view itemview一个参数,此处因为需要,所以要添加int viewtype的参数,代码中如下:
//初始化viewholder,此处绑定后在onbindviewholder中可以直接使用 public viewholder(view itemview, int viewtype) { super(itemview); if (viewtype == normal_type) { tvviewholder = (textview) itemview.findviewbyid(r.id.tv_view_holder); llviewholder = (linearlayout) itemview; } else if (viewtype == foot_type) { tvfootview = (textview) itemview; } }
此处再说一下三个函数的大致作用:
viewholder(view itemview, int viewtype):
将item布局中的控件与viewholder中所定义的属性绑定,更便于在onbindviewholder()中使用。
oncreateviewholder(viewgroup parent, int viewtype):
此函数用来创建每一个item,最后返回的不是view,而是返回的一个viewholder。
onbindviewholder(viewholder holder, int position):
此函数中一般用来将数据绑定到item中的控件中。
代码:
结合以上分析看代码,读者应该比较容易理解了,下面附上关键adapter代码和源码地址:
public class recycleradapter extends recyclerview.adapter<recycleradapter.viewholder> { private list<string> mdata;//数据 private int max_count = 10;//最大显示数 private boolean isfootview = false;//是否添加了footview private string footviewtext = "";//footview的内容 //两个final int类型表示viewtype的两种类型 private final int normal_type = 0; private final int foot_type = 1111; public recycleradapter(list<string> data) { mdata = data; } public class viewholder extends recyclerview.viewholder { public textview tvviewholder; public linearlayout llviewholder; public textview tvfootview;//footview的textview属于独自的一个layout //初始化viewholder,此处绑定后在onbindviewholder中可以直接使用 public viewholder(view itemview, int viewtype) { super(itemview); if (viewtype == normal_type) { tvviewholder = (textview) itemview.findviewbyid(r.id.tv_view_holder); llviewholder = (linearlayout) itemview; } else if (viewtype == foot_type) { tvfootview = (textview) itemview; } } } @override public viewholder oncreateviewholder(viewgroup parent, int viewtype) { view normal_views = layoutinflater.from(parent.getcontext()).inflate( r.layout.rc_item, parent, false); view foot_view = layoutinflater.from(parent.getcontext()).inflate( r.layout.foot_view, parent, false); if (viewtype == foot_type) return new viewholder(foot_view, foot_type); return new viewholder(normal_views, normal_type); } @override public int getitemviewtype(int position) { if (position == max_count - 1) { return foot_type; } return normal_type; } @override public void onbindviewholder(viewholder holder, int position) { //建立起viewholder中试图与数据的关联 log.d("xjj", getitemviewtype(position) + ""); //如果footview存在,并且当前位置viewtype是foot_type if (isfootview && (getitemviewtype(position) == foot_type)) { holder.tvfootview.settext(footviewtext); } else { holder.tvviewholder.settext(mdata.get(position) + position); } } @override public int getitemcount() { if (mdata.size() < max_count) { return mdata.size(); } return max_count; } //创建一个方法来设置footview中的文字 public void setfootviewtext(string footviewtext) { isfootview = true; this.footviewtext = footviewtext; } }
拓展延伸
下一篇文章中,笔者在此基础上做了一下一点改动,很容易就实现了分页加载的功能,文章地址如下:
http://blog.csdn.net/double2hao/article/details/52788708
源码地址:http://xiazai.jb51.net/201610/yuanma/androidpullrecyclerview(jb51.net).rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
Android RecyclerView添加FootView和HeadView
-
Android代码实现AdapterViews和RecyclerView无限滚动
-
Android RecyclerView滑动删除和拖动排序
-
Android给自定义按键添加广播和通过广播给当前焦点输入框赋值
-
Android简单修改原有应用和添加应用的方法
-
Android App使用RecyclerView实现上拉和下拉刷新的方法
-
Android RecyclerView添加头部和底部的方法
-
Android给自定义按键添加广播和通过广播给当前焦点输入框赋值
-
Android RecyclerView添加头部和底部的方法
-
Android ListView添加头布局和脚布局实例详解