Recyclerview添加头布局和尾布局、item点击事件详解
时间:2019-03-30
本文章向大家介绍Recyclerview添加头布局和尾布局、item点击事件详解,主要包括Recyclerview添加头布局和尾布局、item点击事件详解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
简介:
本篇博客主要包括recyclerview添加多种布局以及添加头布局和尾布局,还有item点击事件
思路:
主要重写Recyclerview.Adapter中的一些方法
1.public int getItemCount() item熟练 +2(头布局和尾布局)
2.public int getItemViewType(int position) 判断position 设置itemType
3.创建不同的ViewHolder,分别用来加载头布局,正常布局,尾布局
4.public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 根据viewType的不同返回不同的viewholder
5.public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) 根据holder的不同绑定不同的数据
案例:
主布局中只有一个Recyclerview,里面的item除了基本的两种类型,还有头布局和尾布局,点击基本类型跳转到另外一个Activity,显示图片
下面主要贴出Adapter和MainActivity中的代码,其他的布局文件,类比较简单就不贴出了
1.Adapter
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener { private Context context; private List<Person> datas; private static final int ITEM_ONE=1; private static final int ITEM_TWO=2; private static final int ITEM_HEAD=3; private static final int ITEM_FOOT=4; private int headViewCount=1; private int footViewCount=1; private OnItemClickListener onItemClickListener; public MyAdapter(Context context, List<Person> datas) { this.context = context; this.datas = datas; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(viewType==ITEM_HEAD){ View view= LayoutInflater.from(context).inflate(R.layout.item_head,parent,false); return new HeaderViewHolder(view); }else if(viewType==ITEM_FOOT){ View view=LayoutInflater.from(context).inflate(R.layout.item_foot,parent,false); return new FootViewHolder(view); } else if(viewType==ITEM_ONE){ View view= LayoutInflater.from(context).inflate(R.layout.item_recyclerview,parent,false); return new ViewHolder(view); }else if(viewType==ITEM_TWO){ View view=LayoutInflater.from(context).inflate(R.layout.item_recyclerview2,parent,false); return new ViewHolder(view); } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { if(holder instanceof HeaderViewHolder){ }else if(holder instanceof FootViewHolder){ } else if(holder instanceof ViewHolder){ //注意除去头布局 holder.itemView.setTag(position-1); holder.itemView.setOnClickListener(this); ((ViewHolder)holder).img.setBackgroundResource(datas.get(position-1).getImgId()); ((ViewHolder)holder).tv1.setText(datas.get(position-1).getName()); ((ViewHolder)holder).tv2.setText(datas.get(position-1).getDetail()); } } @Override public int getItemCount() { if(datas==null){ return headViewCount+footViewCount; } return datas.size()+headViewCount+footViewCount; } @Override public int getItemViewType(int position) { if(isHeadView(position)){ return ITEM_HEAD; } if(isFootView(position)){ return ITEM_FOOT; } if(position%2==0){ return ITEM_ONE; }else{ return ITEM_TWO; } } public boolean isHeadView(int position){ return headViewCount!=0&&position<headViewCount; } public boolean isFootView(int position){ return footViewCount!=0&&position>=(datas.size()+headViewCount); } @Override public void onClick(View view) { if(onItemClickListener!=null){ onItemClickListener.onItemClick(view, (Integer) view.getTag()); } } class ViewHolder extends RecyclerView.ViewHolder{ TextView tv1,tv2; ImageView img; public ViewHolder(View itemView) { super(itemView); tv1=itemView.findViewById(R.id.tv1); tv2=itemView.findViewById(R.id.tv2); img=itemView.findViewById(R.id.img); } } class HeaderViewHolder extends RecyclerView.ViewHolder{ public HeaderViewHolder(View itemView) { super(itemView); } } class FootViewHolder extends RecyclerView.ViewHolder{ public FootViewHolder(View itemView) { super(itemView); } } public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener=onItemClickListener; } interface OnItemClickListener{ void onItemClick(View view,int position); } }
2.MainActivity
public class MainActivity extends AppCompatActivity implements MyAdapter.OnItemClickListener { private RecyclerView recyclerView; private List<Person> datas; private MyAdapter adapter; private int[] imgs={R.drawable.p1,R.drawable.p2,R.drawable.p3,R.drawable.p4,R.drawable.p5,R.drawable.pic1, R.drawable.pic2,R.drawable.pic3,R.drawable.pic4,R.drawable.pic5,R.drawable.pic6}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView= (RecyclerView) findViewById(R.id.recyclerview); initData(); initRecyclerView(); } private void initRecyclerView() { recyclerView.setLayoutManager(new LinearLayoutManager(this)); adapter=new MyAdapter(this,datas); adapter.setOnItemClickListener(this); recyclerView.setAdapter(adapter); } private void initData() { datas=new ArrayList<>(); for(int i=0;i<imgs.length;i++){ Person p=new Person(); p.setName("hahfa"+i); p.setDetail("今天是星期一,还有5天才能休息"+i); p.setImgId(imgs[i]); datas.add(p); } } @Override public void onItemClick(View view, int position) { Intent intent=new Intent(MainActivity.this,ImageActivity.class); intent.putExtra("imgId",datas.get(position).getImgId()); startActivity(intent); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- 全面解析C#中的异步编程为什么要异步过去糟糕的体验一个新的方式Tasks基于任务的异步编程模型Async和await时间处理程序和无返回值的异步方法结束语
- CSS深入理解学习笔记之absolute
- 5个经典的JavaScript面试题
- 轻松初探 Python 篇(四)—list tuple range 知识汇总
- CSS深入理解学习笔记之overflow
- Python爬虫实践——简单爬取我的博客
- Python爬虫入门(二)
- 在ASP.NET MVC5应用程序中快速接入QQ和新浪微博OAuth起步创建应用程序使用NUGET更新OWIN中间件启动SSL支持申请腾讯QQ的Oauth申请新浪微博的Oauth快速接入资源地址&源码
- 有趣的算法(六) ——Find-Union算法
- 有趣的算法(七) ——快速排序改进算法
- 编写你人生中第一个机器学习代码吧!
- 使用Octave来学习Machine Learning(二)
- RESTful API的十个最佳实践1. 使用名词而不是动词 2. Get方法和查询参数不应该改变资源状态3. 使用名词的复数形式 4. 为关系使用子资源 5. 使用HTTP头决定序列化格式 6. 使
- MYSQL数据库设计的一些小技巧[转载]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法