学习笔记 Tianmao 篇 RecyclerView.Adapter 的封装
零.这能可能很不成熟 但是效果能出来
一.先写一个基础类BaseRecycleAdapter
1.构造函数要传进来
private Context context;private List list;
2. 有两个抽象方法用于在真正的Adapter 中根据view类型使用对应的方法
abstract RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType);abstract void onBindViewHolder(RecyclerView.ViewHolder holder, int position);
3.要有 getList() getContext()用于子类获取list和context
public Context getContext() {return context;
}
public List getList() {return list;
}
4.这是代码
package pers.lijunxue.tianmao.adapter;import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;import java.util.List;Created by rabook on 2016/10/22.abstract class BaseRecycleAdapter {private Context context;private List list;public BaseRecycleAdapter(List list , Context context){this.list = list;this.context = context;}abstract RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType);abstract void onBindViewHolder(RecyclerView.ViewHolder holder, int position);public List getList() {return list;}public Context getContext() {return context;}
}
二.写真正的Adapter类继承RecyclerView.Adapter
1. 属性分为 list、context 和各个假的RecycleAdapterImpl
2. 注:(这个RecycleAdapterImpl继承基础类BaseRecycleAdapter)
List<ViewBean> list;
private Context context;
//这里放可能要用到的Adapterprivate private HomeFirstRecycleAdapterImpl homeFirstItemAdapterImpl;private HomeSecondRecycleAdapterImpl homeSecondItemAdapterImpl;
3.写出onCreateViewHolder方法 这里就要用到RecycleAdapterImpl类了,这个辅助类根据Viewbean的类型使用响应类的方法
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//根据类型实力化RecycleAdapterImplswitch (viewType){case HomeFirstViewBean.TYPE:homeFirstItemAdapterImpl = new HomeFirstRecycleAdapterImpl(list,context);return homeFirstItemAdapterImpl.onCreateViewHolder(parent,viewType);case HomeSecondViewBean.TYPE:homeSecondItemAdapterImpl = new HomeSecondRecycleAdapterImpl(list,context);return homeSecondItemAdapterImpl.onCreateViewHolder(parent,viewType);case HomeThirdViewBean.TYPE:homeThirdItemAdapterImpl = new HomeThirdRecycleAdapterImpl(list,context);return homeThirdItemAdapterImpl.onCreateViewHolder(parent,viewType);case HomeFourthViewBean.TYPE:homeFourthItemAdapterImpl = new HomeFourthRecycleAdapterImpl(list,context);return homeFourthItemAdapterImpl.onCreateViewHolder(parent,viewType);case CareFirstViewBean.TYPE:careFirstRecycleAdapterImpl = new CareFirstRecycleAdapterImpl(list,context);return careFirstRecycleAdapterImpl.onCreateViewHolder(parent,viewType);}return null;}
4.写出onBindViewHolder方法 这里也要用到RecycleAdapterImpl类了,这个辅助类根据holder的类型使用响应类的方法 因为holder是由RecycleAdapterImpl类生成的所以很容易找到响应的方法
//绑定数据,即绑定子空间中的数据@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {//instanceof功能 holder是否是HomeSecondItemAdapterImpl.HomeSecondViewHolder类的实例//找了这个功能好久....//根据holder 匹配 数据设置if (holder instanceof HomeFirstRecycleAdapterImpl.HomeFirstViewHolder){homeFirstItemAdapterImpl.onBindViewHolder(holder, position);}else if (holder instanceof HomeSecondRecycleAdapterImpl.HomeSecondViewHolder) {homeSecondItemAdapterImpl.onBindViewHolder(holder, position);}else if (holder instanceof HomeThirdRecycleAdapterImpl.HomeThirdViewHolder) {homeThirdItemAdapterImpl.onBindViewHolder(holder,position);}else if (holder instanceof HomeFourthRecycleAdapterImpl.HomeFourthViewHolder) {homeFourthItemAdapterImpl.onBindViewHolder(holder,position);}else if (holder instanceof CareFirstRecycleAdapterImpl.CareFirstViewHolder) {careFirstRecycleAdapterImpl.onBindViewHolder(holder,position);}}
5.写出getItemCount()
//返回数据的大小@Overridepublic int getItemCount() {return list.size();}
6.重写getItemViewType 这个结果会被 使用到onCreateViewHolder(ViewGroup parent, int viewType) 的viewType上
//这里重写 而不是实现抽象方法 返回的东西用在 onCreateViewHolder 里的viewType参数
@Override
public int getItemViewType(int position) {return list.get(position).getType();
}
7.这是代码
package pers.lijunxue.tianmao.adapter;import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.ViewGroup;import java.util.List;import pers.lijunxue.tianmao.javabean.CareFirstViewBean;
import pers.lijunxue.tianmao.javabean.HomeFirstViewBean;
import pers.lijunxue.tianmao.javabean.HomeFourthViewBean;
import pers.lijunxue.tianmao.javabean.HomeSecondViewBean;
import pers.lijunxue.tianmao.javabean.HomeThirdViewBean;
import pers.lijunxue.tianmao.javabean.ViewBean;Created by rabook on 2016/10/20.public class RecycleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {private List<ViewBean> list;private Context context;//这里放可能要用到的Adapterprivate HomeFirstRecycleAdapterImpl homeFirstItemAdapterImpl;private HomeSecondRecycleAdapterImpl homeSecondItemAdapterImpl;private HomeThirdRecycleAdapterImpl homeThirdItemAdapterImpl;private HomeFourthRecycleAdapterImpl homeFourthItemAdapterImpl;private CareFirstRecycleAdapterImpl careFirstRecycleAdapterImpl;public RecycleAdapter(List<ViewBean> list, Context context){this.list=list;this.context = context;}绑定item布局文件,然后在内部类ViewHolder中绑定item布局文件中的子控件@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {//根据类型实力化Adapterswitch (viewType){case HomeFirstViewBean.TYPE:homeFirstItemAdapterImpl = new HomeFirstRecycleAdapterImpl(list,context);return homeFirstItemAdapterImpl.onCreateViewHolder(parent,viewType);case HomeSecondViewBean.TYPE:homeSecondItemAdapterImpl = new HomeSecondRecycleAdapterImpl(list,context);return homeSecondItemAdapterImpl.onCreateViewHolder(parent,viewType);case HomeThirdViewBean.TYPE:homeThirdItemAdapterImpl = new HomeThirdRecycleAdapterImpl(list,context);return homeThirdItemAdapterImpl.onCreateViewHolder(parent,viewType);case HomeFourthViewBean.TYPE:homeFourthItemAdapterImpl = new HomeFourthRecycleAdapterImpl(list,context);return homeFourthItemAdapterImpl.onCreateViewHolder(parent,viewType);case CareFirstViewBean.TYPE:careFirstRecycleAdapterImpl = new CareFirstRecycleAdapterImpl(list,context);return careFirstRecycleAdapterImpl.onCreateViewHolder(parent,viewType);}return null;}绑定数据,即绑定子空间中的数据@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {instanceof功能 holder是否是HomeSecondItemAdapterImpl.HomeSecondViewHolder类的实例找了这个功能好久....根据holder 匹配 数据设置if (holder instanceof HomeFirstRecycleAdapterImpl.HomeFirstViewHolder){homeFirstItemAdapterImpl.onBindViewHolder(holder, position);}else if (holder instanceof HomeSecondRecycleAdapterImpl.HomeSecondViewHolder) {homeSecondItemAdapterImpl.onBindViewHolder(holder, position);}else if (holder instanceof HomeThirdRecycleAdapterImpl.HomeThirdViewHolder) {homeThirdItemAdapterImpl.onBindViewHolder(holder,position);}else if (holder instanceof HomeFourthRecycleAdapterImpl.HomeFourthViewHolder) {homeFourthItemAdapterImpl.onBindViewHolder(holder,position);}else if (holder instanceof CareFirstRecycleAdapterImpl.CareFirstViewHolder) {careFirstRecycleAdapterImpl.onBindViewHolder(holder,position);}}返回数据的大小@Overridepublic int getItemCount() {return list.size();}这里重写 而不是实现抽象方法 返回的东西用在 onCreateViewHolder 里的viewType参数@Overridepublic int getItemViewType(int position) {Log.d("getItemViewType","--------------list.get(position).getType()-------"+list.get(position).getType());return list.get(position).getType();}}
三.写出RecycleAdapterImpl类
1.onCreateViewHolde中要在view里加入布局
返回HomeThirdViewHolder类的实例
2.HomeThirdViewHolder 构造函数 用于绑定布局各个控件到自己类的属性
3.HomeThirdViewHolder中onBind()方法 对属性进行初始化 赋值
4.onBindViewHolder()方法调用onBind()就可以
package pers.lijunxue.tianmao.adapter;import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import com.squareup.picasso.Picasso;import java.util.List;import pers.lijunxue.tianmao.R;
import pers.lijunxue.tianmao.javabean.HomeThirdViewBean;
import pers.lijunxue.tianmao.javabean.HomeThirdViewItemBean;适配 title 加3图片 与 4型有区别Created by rabook on 2016/10/25.public class HomeThirdRecycleAdapterImpl extends BaseRecycleAdapter {private LayoutInflater layoutInflater;public HomeThirdRecycleAdapterImpl(List list, Context context) {super(list, context);}@OverrideRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {layoutInflater = LayoutInflater.from(parent.getContext());View view = layoutInflater.inflate(R.layout.home_item_card_view_three, parent, false);return new HomeThirdViewHolder(view);}@Overridevoid onBindViewHolder(RecyclerView.ViewHolder holder, int position) {HomeThirdViewHolder homeThirdViewHolder = (HomeThirdViewHolder)holder;homeThirdViewHolder.onBind(super.getList(),position,super.getContext());}绑定item布局文件中的子控件 监听动作class HomeThirdViewHolder extends RecyclerView.ViewHolder {private HomeThirdViewBean homeThirdViewBean;private HomeThirdViewItemBean [] items ;private TextView title ;private ImageView[] images;private int [] imgview_ids = {R.id.imgview_big,R.id.imgview_small_top,R.id.imgview_small_bottom};public HomeThirdViewHolder(View itemView) {super(itemView);items = new HomeThirdViewItemBean[3];images = new ImageView[3];title = (TextView) itemView.findViewById(R.id.text_title);for (int i = 0;i < images.length ; i++) {images[i] = (ImageView) itemView.findViewById(imgview_ids[i]);}}public void onBind(List list , int position, Context context){homeThirdViewBean = (HomeThirdViewBean)list.get(position);items [0] = homeThirdViewBean.getCpOne();items [1] = homeThirdViewBean.getCpTwo();items [2] = homeThirdViewBean.getCpThree();for (int i = 0; i<items.length;i++) {ImageView imageView = images[i];//使用网络图片Picasso.with(context).load(items[i].getImgUrl()).into(imageView);title.setText(homeThirdViewBean.getTitle());}}}
}
四.在Fragment调用RecyclerView的代码
/*** 初始化 initRecyclerView 基本设置* @param view*/private void initRecyclerView(View view) {recyclerView= (RecyclerView) view.findViewById(R.id.recycler_view);recycleAdapter =new RecycleAdapter(recycleList,getContext());//加载adapterrecyclerView.setAdapter(recycleAdapter);//必须写才能出现recyclorView 也可以是GirdLayoutManager,只是显示item的图形不一样recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));//这里设置了自定义分割线 自定义分割线的类继承了RecyclerView.ItemDecorationrecyclerView.addItemDecoration(new HomeItemDecoration());}
学习笔记 Tianmao 篇 RecyclerView.Adapter 的封装相关推荐
- MySQL学习笔记-基础篇1
MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...
- Redis学习笔记①基础篇_Redis快速入门
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...
- Redis学习笔记②实战篇_黑马点评项目
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...
- [mmu/cache]-ARM MMU的学习笔记-一篇就够了
★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM cache的学习笔记-一 ...
- [mmu/cache]-ARM cache的学习笔记-一篇就够了
★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM MMU的学习笔记-一篇就 ...
- Vue学习笔记进阶篇——Render函数
本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编 ...
- PHP学习笔记 - 进阶篇(7)
PHP学习笔记 - 进阶篇(7) 文件操作 读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中. $conte ...
- Directx11学习笔记【二】 将HelloWin封装成类
我们把上一个教程的代码封装到一个类中来方便以后的使用. 首先新建一个空工程叫做MyHelloWin,添加一个main.cpp文件,然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 My ...
- Vue学习笔记入门篇——数据及DOM
本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...
- WPF学习笔记(数据绑定篇3)
接上回的<WPF学习笔记(数据绑定篇2)>,继续 BindValidation 此示例演示了: 如何使用错误模板: 使用样式显示错误信息: 如何在校验发生异常时执行回调: 首先,你可以看见 ...
最新文章
- jax-rs/jersey_在Oracle Cloud上的Prime-UI,JAX-RS和Jersey和Gson
- 2引擎帮助文档_使用Sentence Transformers和Faiss构建语义搜索引擎
- 电脑安装ubuntu linux操作系统
- String、StringBuffer、StringBuilder有什么区别
- 2017美赛A题论文阅读笔记
- Java连接wincc_WinCC中访问SQL SERVER数据库
- imx6q的启动方式
- 白帽黑客获 5 万美元赏金!只因利用漏洞控制所有特斯拉汽车
- 哪些行业网站适合使用CDN加速?
- 最新电脑cpu性能排行服务器,服务器cpu性能如何 服务器cpu性能排行榜介绍【详解】...
- python实现对遥感影像经纬度获取并实现海陆分离
- 自然语言处理 情绪识别
- 延禧攻略插曲6首歌词+简谱
- 峡谷之巅显示服务器更新,峡谷之巅更新最新资讯
- 人像抠图软件哪个好?这些软件助你实现人像抠图
- 人体捕捉:《SMPL-X》
- 诸侯安置(暴力搜索)
- 如何快速修复谷歌浏览器扩展插件频繁损坏问题
- 输出组成的倒三角图案
- 自守数(难度:半颗星)