零.这能可能很不成熟 但是效果能出来

一.先写一个基础类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 的封装相关推荐

  1. MySQL学习笔记-基础篇1

    MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...

  2. Redis学习笔记①基础篇_Redis快速入门

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...

  3. Redis学习笔记②实战篇_黑马点评项目

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...

  4. [mmu/cache]-ARM MMU的学习笔记-一篇就够了

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM cache的学习笔记-一 ...

  5. [mmu/cache]-ARM cache的学习笔记-一篇就够了

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM MMU的学习笔记-一篇就 ...

  6. Vue学习笔记进阶篇——Render函数

    本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编 ...

  7. PHP学习笔记 - 进阶篇(7)

    PHP学习笔记 - 进阶篇(7) 文件操作 读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中. $conte ...

  8. Directx11学习笔记【二】 将HelloWin封装成类

    我们把上一个教程的代码封装到一个类中来方便以后的使用. 首先新建一个空工程叫做MyHelloWin,添加一个main.cpp文件,然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 My ...

  9. Vue学习笔记入门篇——数据及DOM

    本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...

  10. WPF学习笔记(数据绑定篇3)

    接上回的<WPF学习笔记(数据绑定篇2)>,继续 BindValidation 此示例演示了: 如何使用错误模板: 使用样式显示错误信息: 如何在校验发生异常时执行回调: 首先,你可以看见 ...

最新文章

  1. jax-rs/jersey_在Oracle Cloud上的Prime-UI,JAX-RS和Jersey和Gson
  2. 2引擎帮助文档_使用Sentence Transformers和Faiss构建语义搜索引擎
  3. 电脑安装ubuntu linux操作系统
  4. String、StringBuffer、StringBuilder有什么区别
  5. 2017美赛A题论文阅读笔记
  6. Java连接wincc_WinCC中访问SQL SERVER数据库
  7. imx6q的启动方式
  8. 白帽黑客获 5 万美元赏金!只因利用漏洞控制所有特斯拉汽车
  9. 哪些行业网站适合使用CDN加速?
  10. 最新电脑cpu性能排行服务器,服务器cpu性能如何 服务器cpu性能排行榜介绍【详解】...
  11. python实现对遥感影像经纬度获取并实现海陆分离
  12. 自然语言处理 情绪识别
  13. 延禧攻略插曲6首歌词+简谱
  14. 峡谷之巅显示服务器更新,峡谷之巅更新最新资讯
  15. 人像抠图软件哪个好?这些软件助你实现人像抠图
  16. 人体捕捉:《SMPL-X》
  17. 诸侯安置(暴力搜索)
  18. 如何快速修复谷歌浏览器扩展插件频繁损坏问题
  19. 输出组成的倒三角图案
  20. 自守数(难度:半颗星)

热门文章

  1. 五个最佳FTP客户端工具
  2. PowerGUI 如何调整字体
  3. 《中国品牌故事》讲述中节能品牌故事:皓日初升
  4. OpenCV threshold函数详解
  5. 【asp.net core 系列】6 实战之 一个项目的完整结构
  6. html怎么设置火狐ie兼容模式,火狐浏览器兼容模式如何设置?火狐浏览器兼容模式设置方法分享...
  7. FPGA学习——矩阵键盘驱动及数码管显示键值
  8. html超链接位置居中,html 标题 超链接 居中 换行 图片 新标签页
  9. 通信原理-确定信号分析
  10. MATLAB在主成分分析中的应用