当前位置: 移动技术网 > IT编程>移动开发>Android > Android RecyclerView添加FootView和HeadView

Android RecyclerView添加FootView和HeadView

2019年07月24日  | 移动技术网IT编程  | 我要评论

前提概要:

上一篇文章已经介绍过了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

源码地址:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网