RecycleView实现footer功能
来源:互联网 发布:英雄联盟mac有国服? 编辑:程序博客网 时间:2024/06/05 06:12
其实和Header是差不多的,只是这里在计算item数的时候要加上footer这个item,具体代码如下。
准备两个xml,一个用于普通的Item,一个用于底部footer的item。
list_item_add_footer.xml
<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:card_view="http://schemas.android.com/tools" android:layout_width="80dp" android:layout_height="wrap_content" android:layout_margin="10dp" android:orientation="vertical" android:padding="2dp" card_view:cardPreventCornerOverlap="true" app:cardCornerRadius="8dp"> <TextView android:id="@+id/tv_add" android:padding="5dp" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="+添加" android:textColor="#244fff"/></android.support.v7.widget.CardView>
list_item_section_show.xml
<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:card_view="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:orientation="vertical" android:padding="2dp" card_view:cardPreventCornerOverlap="true" app:cardCornerRadius="8dp"> <LinearLayout android:background="@drawable/cardview_backgroud" android:id="@+id/layout_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:paddingBottom="10dp" android:paddingLeft="10dp" android:paddingTop="10dp"> <TextView android:id="@+id/tv_class_section" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/tv_section" android:text="XXX" android:singleLine="true" android:ellipsize="end" android:textColor="@color/word_color_666666" android:textSize="@dimen/two_level_word"/> </LinearLayout> <TextView android:id="@+id/tv_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:background="@drawable/newly_increased"/> </LinearLayout></android.support.v7.widget.CardView>
接下来最重要的部分是Adapter了,就是在这个地方实现添加Footer
public class DetailItemSelectAdapter extends RecyclerView.Adapter{ private List<Object> infoBeen = new ArrayList<>(); private Context context; private int ITEM_VIEW_TYPE_FOOTER = 0; //Footer标识 private static final int ITEM_VIEW_TYPE_ITEM = 1; private static View footer; private int WITCH_BEAN = 0; public static final int COURSE_BEAN = 0; public static final int SESSION_BEAN = 1; public static final int TEACHER_BEAN = 2; public DetailItemSelectAdapter(Context mContext,View mFooter,List<Object> mInfoBean, int WITCH){ context = mContext; if(mFooter != null){ footer = mFooter; } WITCH_BEAN = WITCH; infoBeen = mInfoBean; ITEM_VIEW_TYPE_FOOTER = infoBeen.size(); //footer最开始定为最后条目 } public boolean isFooter(int position) { return position == infoBeen.size(); //是否是Footer } @Override public int getItemViewType(int position) { return isFooter(position) ? ITEM_VIEW_TYPE_FOOTER : ITEM_VIEW_TYPE_ITEM; } @Override public DisplayHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == ITEM_VIEW_TYPE_FOOTER) { return new DisplayHolder(footer); //传入footer } return DisplayHolder.newHolder(parent, context); //传入条目 } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if(isFooter(position)){ DisplayHolder lHolder = (DisplayHolder) holder; lHolder.addTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ToastUtils.showShortToast(context,"click add button"); } }); return; } DisplayHolder lHolder = (DisplayHolder) holder; DetailItemShowBean.SectionInfoBean sectionInfoBean = (DetailItemShowBean.SectionInfoBean) infoBeen.get(position); lHolder.classSectionTv.setText(sectionInfoBean.getSectionName()); lHolder.deleteTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { notifyItemRemoved(position); infoBeen.remove(position); notifyDataSetChanged(); } }); } @Override public int getItemCount() { return infoBeen.size()+1; //有footer所以要+1 } private static class DisplayHolder extends RecyclerView.ViewHolder { TextView deleteTv; TextView classSectionTv; TextView addTv; public DisplayHolder(View itemView) { super(itemView); deleteTv = (TextView) itemView.findViewById(R.id.tv_delete); classSectionTv = (TextView) itemView.findViewById(R.id.tv_class_section); addTv = (TextView) itemView.findViewById(R.id.tv_add); } private static DisplayHolder newHolder(ViewGroup parent, Context context) { View view = LayoutInflater.from(context).inflate(R.layout.list_item_section_show, parent, false); return new DisplayHolder(view); } }}
可以看到最开始要传入的有Context、list、View和一个自定义的显示参数,最后就是在Activity中使用,使用方法如下:
sectionRecyclerView = (RecyclerView)findViewById(R.id.rv_section); sectionRecyclerView.setLayoutManager(new LinearLayoutManager(this)); List<Object> list =new ArrayList<>(); for(int i =0;i<10;i++){ DetailItemShowBean.SectionInfoBean s = new DetailItemShowBean.SectionInfoBean(); s.setSectionName("第"+(i+1)+"节"); Object object = s; list.add(object); } View footer = LayoutInflater.from(this).inflate(R.layout.list_item_add_footer,sectionRecyclerView,false); DetailItemSelectAdapter detailItemSelectAdapter = new DetailItemSelectAdapter(this,footer,list,0); sectionRecyclerView.setAdapter(detailItemSelectAdapter);
最终的效果是普通的item是文字并可以删除,footer为一个添加的操作。
最后说一下,如果想要Footer独占一行,可以参考这篇文章:http://blog.csdn.net/lsw8569013/article/details/53667754
0 0
- RecycleView实现footer功能
- recycleview实现gridview功能
- RecycleView添加header和footer
- 用datagrid 的 Footer实现 添加修改和删除功能
- Gridview的footer模板中放置控件实现添加功能
- 实现带header和footer功能的RecyclerView
- RecycleView上拉加载更多、实现分批分页功能
- CSS实现Footer置底
- 实现stick footer布局
- 实现带header和footer功能的RecyclerView——完善篇
- 使用recycleview 实现viewpager 功能,并带有指示器。(仿高德交通路线规划实现)
- RecycleView 底部按钮实现
- RecycleView实现瀑布流
- RecycleView监听实现
- RecycleView 动画实现
- RecycleView的简单实现
- RecycleView的实现
- RecycleView实现多布局
- [percona-toolkit]pt-query-digest用法
- 微信企业号注册教程 视频教程 公众号 服务号 订阅号
- 解析json串的两种方式
- Android混淆、逆向
- HIVE下分布式生成整型唯一ID
- RecycleView实现footer功能
- 777C Alyona and Spreadsheet
- 如何快速学习一门程序语言?
- ScrollView嵌套Listview问题
- git命令行操作
- 爬虫之PermissionError: [Errno 13] Permission denied: 'ghostdriver.log'问题解决
- React Native 之
- APP测试功能点总结
- echart hightchart 区别