RecyclerView添加头和尾

2024-06-20 03:58
文章标签 recyclerview

本文主要是介绍RecyclerView添加头和尾,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

第一步实现继承RecyclerView.ViewHolder 的子类CommonViewHolder

public class CommonViewHolder extends RecyclerView.ViewHolder {public TextView title_textview;public CommonViewHolder(@NonNull View itemView) {super(itemView);title_textview = itemView.findViewById(R.id.title_textview);}
}

第二步封装适配器BaseAdapter

public abstract class BaseAdapter<T> extends RecyclerView.Adapter<CommonViewHolder> {private final int headType = -1;private final int footerType = -2;private final int commonType = 0 ;private View headView;private View footerView;private List<T> list = new ArrayList<>();private Context context;/*** @param list*/public BaseAdapter(Context context,List<T> list){this.list.clear();if (list!=null){this.list.addAll(list);}this.context = context;}/*** 添加头部的view** @param view*/public BaseAdapter addHeadView(View view){this.headView =view ;return this;}/*** 添加底部view** @param view*/public BaseAdapter addFooterView(View view){this.footerView =view ;return this;}/*** @param position* @return*/@Overridepublic int getItemViewType(int position) {if (isHeadView(position))return headType ;if (isFooterView(position))return footerType ;return commonType;}/*** 判断是 head* @param position* @return*/public boolean isHeadView(int position ){if (headView != null && position == 0 ){return true ;}return false ;}/**** @param position* @return*/public boolean isFooterView(int position){if (footerView != null){if (headView!=null ? (position==list.size()+1):(position==list.size())){return true ;}}return false ;}@Overridepublic CommonViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {CommonViewHolder holder = null;switch (i){case headType:holder = new CommonViewHolder(headView);break;case footerType:holder = new CommonViewHolder(footerView);break;case commonType:holder = new CommonViewHolder(LayoutInflater.from(context).inflate(getLayoutId(),viewGroup,false));break;}return holder ;}@Overridepublic void onBindViewHolder(@NonNull CommonViewHolder viewHolder, int position) {if (isHeadView(position)){headView(viewHolder);} else if (isFooterView(position)){footerView(viewHolder);}else {int p = headView != null ? position - 1 : position;itemView(viewHolder,list.get(p),p);}}@Overridepublic int getItemCount() {int count = 0;if (headView!=null){count += 1;}if (footerView != null){count += 1;}return list == null ? count : list.size()+count;}/*** 列表 item* @return*/public abstract int getLayoutId();/*** @param viewHolder* @param position* @param t*/public abstract void itemView(CommonViewHolder viewHolder,T t ,int position);/*** @param viewHolder*/public void headView(CommonViewHolder viewHolder){}/*** @param viewHolder*/public void footerView( CommonViewHolder viewHolder){}@Overridepublic void onViewAttachedToWindow(@NonNull CommonViewHolder holder) {super.onViewAttachedToWindow(holder);ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();if(lp != null && lp instanceof StaggeredGridLayoutManager.LayoutParams && (isFooterView(holder.getLayoutPosition())||isHeadView(holder.getLayoutPosition()))) {StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp;p.setFullSpan(true);}}

如何使用

  BaseAdapter<String> adapter;public void init(){List<String> list = new ArrayList<>();mRecyclerView =  findViewById(R.id.mRecyclerView);LinearLayoutManager l = new LinearLayoutManager(this);l.setOrientation(LinearLayoutManager.VERTICAL);mRecyclerView.setLayoutManager(l);mRecyclerView.setNestedScrollingEnabled(false);mRecyclerView.addItemDecoration(new MyItem2());list.add("标题0");list.add("标题1");list.add("标题2");list.add("标题3");list.add("标题4");list.add("标题5");list.add("标题6");list.add("标题2");list.add("标题3");list.add("标题4");list.add("标题5");list.add("标题6");list.add("标题2");list.add("标题3");list.add("标题4");list.add("标题5");list.add("标题6");list.add("标题0");adapter=new BaseAdapter<String>(this,list) {@Overridepublic int getLayoutId() {return R.layout.item_layout;}@Overridepublic void itemView(CommonViewHolder viewHolder,  String s,int position) {viewHolder.title_textview.setText(s);}} ;mRecyclerView.setAdapter(adapter);adapter.addHeadView(LayoutInflater.from(this).inflate(R.layout.head_layout,mRecyclerView,false));adapter.addFooterView(LayoutInflater.from(this).inflate(R.layout.footer_layout,mRecyclerView,false));}

三种列表类型的实现

  public void list1(View view){LinearLayoutManager linearLayoutManager =new LinearLayoutManager(this);linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);mRecyclerView.setLayoutManager(linearLayoutManager);}public void list2(View view){final GridLayoutManager gridLayoutManager =new GridLayoutManager(this,2);gridLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);mRecyclerView.setLayoutManager(gridLayoutManager);gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int i) {return (adapter.isHeadView(i)||adapter.isFooterView(i)) ? gridLayoutManager.getSpanCount() :  1;}});}public void list3(View view){final StaggeredGridLayoutManager staggeredGridLayoutManager =new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);staggeredGridLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);mRecyclerView.setLayoutManager(staggeredGridLayoutManager);}

这篇关于RecyclerView添加头和尾的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077037

相关文章

RecyclerView的itemView的点击效果

1,需要在 itemView 的布局 根节点上添加  android:clickable="true" 2、或者通过代码实现 @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {  ((ViewHolder)viewHolder).textView

ScrollView嵌套RecyclerView再嵌套RecyclerView导致的布局展示不完整问题

背景:页面布局,最外层有个ScrollView,然后里面有个RecyclerView,然后每个RecyclerView的item都是一个RecyclerView 异常:页面展示不完整,最底下的Item 展示一半,在往上滑就滑不动了   解决: // 每一个item渲染完后重新计算外层recyclerview高度// 因为外层的recyclerview是先渲染的,渲染时 内部recyc

【项目FJU】使用SwipeRefreshLayout+RecyclerView制作下拉刷新上拉加载更多

效果截图 https://github.com/ydslib/Jianshu/tree/develop 需要用到的知识 setColorSchemeResources:设置下拉刷新进度条的颜色setOnRefreshListener:设置下拉刷新监听android:overScrollMode:设置滑动到边缘时无效果模式ContentLoadingProgressBar:内容加载进度条,继承

ListView和RecyclerView比较

1.ViewHolder 作用: View复用 Listview: 自己定义 RecyclerView: RecyclerView.ViewHolder则变成了必须 2.LayoutManager 作用: 布局管理器 Listview: 官方推荐只做垂直滚动功能 RecyclerView: LinearLayoutManager,可以支持水平和竖直方向上滚动的列表。 S

RecyclerView和CardView的使用以及注意

转载请注明出处 作者:AboutJoke ( http://blog.csdn.net/u013200308 ) 原文链接:http://blog.csdn.net/u013200308/article/details/51244289 距离RecyclerView和CardView的出现已经很久了,网上也有很多关于这方面的博客。因为最近自己在项目中用到了Material Design设计规

解决ScrollView 嵌套RecyclerView出现的问题

ScrollView 嵌套RecyclerView会使RecyclerView列表显示不全,很多人都把ScrollView替换成NestedScrollView,或者重写RecyclerView。 其实使用ScrollView并且不用重写RecyclerView也是可以实现的,那就是在RecyclerView外面再嵌套一层布局就可以了。像下面这样: <ScrollViewand

使用RecyclerView实现item拖拽变换位置重新排序

小知识解决大问题,问题处理+经验分享,大家好,我是时代新人!今天给大家分享一个小例子,请往下看: 今天用RecyclerView实现一个拖拽交换位置,和编辑删除的功能。先来个效果图看一下 1、定义一个ItemTouchHelperAdapter接口 import androidx.recyclerview.widget.RecyclerView;/*** Created by WJY.*

解决RecyclerView条数显示不全问题

小知识解决大问题,问题处理+经验分享,大家好,我是时代新人!今天给大家分享一条小经验,请往下看: 多个RecyclerView同时使用的时候,比如线性垂直排布三个RecyclerView,那么会出现一个问题就是第一个RecyclerView的数据条数显示不全,只能显示一屏的内容,比如有10条数据,一屏只能显示5条,那么第一个RecyclerView就只显示5条数据,然后就显示下一个Recycle

ScrollView嵌套RecyclerView 问题

在滑动的时候,拦截ScrollView的Touch事件: 自定ScrollView: package com.ejamad.information.ui.widget;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import androi

recyclerview 实现拖拽功能

recyclerview实现拖拽功能可以借助原生提供的ItemTouchHelpter类来实现,基础拖拽和删除功能都封装的有,细节需要自己处理下。 先定义一个接口,定义一下方法,方便和adapter联动处理数据,相对ItemTouchHelpter.call 增加一个判断当前所选item是否能够拖拽的判断。 interface RecyclerItemDragTouchHelper {/***