零.这能可能很不成熟 但是效果能出来
一.先写一个基础类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参数
@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;
//这里放可能要用到的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());
}