一、通常RecyclerView的Adapter写法
在使用RecyclerView之前我们还需要导入依赖库,在build.gradle中的dependencies下添加:
compile 'com.android.support:recyclerview-v7:24.2.1'
通常情况下的RecyclerView的Adapter:
package com.gcy.universal_adapter_recyclerview.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.TextView;
import com.gcy.universal_adapter_recyclerview.Entity.Bean;
import com.gcy.universal_adapter_recyclerview.R;
import java.util.List;
/**
* Created by gcy71 on 2016/9/28.
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context mContext;
private List<Bean> mDatas;
private LayoutInflater mInflater;
public MyAdapter(Context context , List<Bean> datas) {
this.mContext = context;
this.mDatas = datas;
this.mInflater = LayoutInflater.from(mContext);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHolder(mInflater.inflate(R.layout.item_recyclerview, parent, false));
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.mTilte.setText(mDatas.get(position).getTitle());
holder.mInfo.setText(mDatas.get(position).getInfo());
holder.mTime.setText(mDatas.get(position).getTime());
}
@Override
public int getItemCount() {
return mDatas.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView mTilte;
TextView mInfo;
TextView mTime;
public MyViewHolder(View itemView) {
super(itemView);
mTilte = (TextView) itemView.findViewById(R.id.id_title);
mInfo = (TextView) itemView.findViewById(R.id.id_info);
mTime = (TextView) itemView.findViewById(R.id.id_time);
}
}
}
观察发现,RecycleView已经强制我们使用ViewHolder,我们在这里仅仅只发现了getItemCount和onCreateViewHolder两个函数存在重复的代码
二、封装ViewHolder
- 同样我们需要一个SparseArray作为我们存放控件的容器,还需要一个itemView用来获取RecyclerView的Item包含的控件
- 用户需要在onBindViewHolder方法中对不同的空间实现数据绑定,所以我们需要一个抛出一个getView给用户获取控件
- 为了减少用户为控件设置值的代码,还可以添加一些辅助方法,例如本例中的setText2TextView,用户在使用的过程中可根据需要自行添加
BaseViewHolder.java
package com.gcy.universal_adapter_recyclerview.utils;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.View;
import android.widget.TextView;
/**
* Created by gcy71 on 2016/9/28.
*/
public class BaseViewHo