学习笔记 Tianmao 篇 RecyclerView.Adapter 的封装
来源:互联网 发布:织梦 查询语句 编辑:程序博客网 时间:2024/05/19 18:13
零.这能可能很不成熟 但是效果能出来
一.先写一个基础类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) {
//根据类型实力化RecycleAdapterImpl switch (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类生成的所以很容易找到响应的方法
//绑定数据,即绑定子空间中的数据 @Override public 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()
//返回数据的大小 @Override public int getItemCount() { return list.size(); }
6.重写getItemViewType 这个结果会被 使用到onCreateViewHolder(ViewGroup parent, int viewType) 的viewType上
//这里重写 而不是实现抽象方法 返回的东西用在 onCreateViewHolder 里的viewType参数@Overridepublic 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; //这里放可能要用到的Adapter private 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布局文件中的子控件 @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //根据类型实力化Adapter switch (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; } 绑定数据,即绑定子空间中的数据 @Override public 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); } } 返回数据的大小 @Override public int getItemCount() { return list.size(); } 这里重写 而不是实现抽象方法 返回的东西用在 onCreateViewHolder 里的viewType参数 @Override public 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); } @Override RecyclerView.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); } @Override void 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()); //加载adapter recyclerView.setAdapter(recycleAdapter); //必须写才能出现recyclorView 也可以是GirdLayoutManager,只是显示item的图形不一样 recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); //这里设置了自定义分割线 自定义分割线的类继承了RecyclerView.ItemDecoration recyclerView.addItemDecoration(new HomeItemDecoration()); }
0 0
- 学习笔记 Tianmao 篇 RecyclerView.Adapter 的封装
- 学习笔记 Tianmao 篇 recyclerView 的自定义使用
- 学习笔记 Tianmao 篇 recyclerView 辅助的RecycleAdapterImpl类(适配Sliderview)
- 学习笔记 Tianmao 篇 recyclerView 辅助的RecycleAdapterImpl类(适配自定义home二型)
- 学习笔记 Tianmao 篇 recyclerView 辅助的RecycleAdapterImpl类(适配自定义home三型)
- 学习笔记 Tianmao 篇 recyclerView 辅助的RecycleAdapterImpl类(适配自定义 模板)
- 学习笔记 Tianmao 篇 SliderLayout 的使用
- 学习笔记之----Adapter的封装(RecyclerView)
- 学习心得 Tianmao 篇 RecyclerView.Adapter 我自己的使用理解(类组合模式)
- 学习笔记 Tianmao 篇 recyclerView 辅助的RecycleAdapterImpl类(适配自定义care 一型 使用了frecso SimpleDraweeView)
- RecyclerView.Adapter的封装
- 学习笔记 Tianmao 篇 OkHttp 网络的使用的简单封装 获取Json用GSON来解析
- 学习笔记 Tianmao 篇 使用简单封装后的自定义OkHttp 获取json被GSON解析后的数据
- 学习笔记 Tianmao 篇 OkHttp 网络的使用
- 学习笔记 Tianmao 篇 materialRefreshLayout 下拉刷新 控件的使用
- 学习笔记 Tianmao 篇 自定义 ToolBar
- Recyclerview Adapter 的简单封装
- RecyclerView.Adapter 的简单封装
- mysql安装需要的配置文件
- 学习Hadoop第二十二课(Sqoop---数据迁移工具)
- 【备忘】科卡在线Linux高级应用视频教程(全套17集)视频下载
- bower解决js的依赖管理
- PS,AI各类设计页面大小
- 学习笔记 Tianmao 篇 RecyclerView.Adapter 的封装
- 155. Min Stack
- thinkphp下的三级联动(带有缓存的)
- 矩阵连乘
- HDOJ 2377 Bus Pass(建图 + BFS)
- Mysql的增删改查语句
- 【HDU 4514】【树的直径 dfs或者并查集判断环】【给定一个无向图,图可能是非连通的,如果图中存在环,就输出YES,否则就输出树的直径】
- Android学习笔记(七)--滑动选项卡TabLayout
- android支付宝集成,支付demo