在写有关RecyclerView方面的代码的时候,每次都要自己写适配器,而且适配器的大体结构都一样,但是在android studio中却不能一键创建适配器。如果有可以快速创建适配器,并且需要传入的类型由我们自己控制,其他的一些重写的方法自动生成,那这样不就能节省了一些重复的操作了嘛,省时又省力。
先来看一下图先:
创建出来的适配器类:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> {
private Context mContext;
private List<String> mStrings;
private LayoutInflater mLayoutInflater;
private OnStringItemClickListener mOnStringItemClickListener;
public void setOnStringItemClickListener(OnStringItemClickListener onStringItemClickListener) {
mOnStringItemClickListener = onStringItemClickListener;
}
public MyAdapter(Context context, List<String> mStrings) {
mContext = context;
this.mStrings = mStrings;
mLayoutInflater = LayoutInflater.from(mContext);
}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mLayoutInflater.inflate(, parent, false);//加载Item布局
return new MyHolder(view);
}
@Override
public void onBindViewHolder(MyHolder holder, int position) {
}
@Override
public int getItemCount() {
return mStrings.size();
}
class MyHolder extends RecyclerView.ViewHolder {
//这里写Item的控件
public MyHolder(View itemView) {
super(itemView);
}
}
interface OnStringItemClickListener {//自定义点击时间回调,根据需要决定
void onStringClick(View v, int position);
}
}
这样我们不用在手动写实现RecyclerView.Adapter和继承RecyclerView.ViewHolder,Item的类型等,只需要关注于加载Item布局,还有数据的适配了。
是不是很方便?接下来就来说怎么做这种代码模板。
依次打开 file --> Settings,找到File and Code Templates,如图:
像上面那样的适配器模板代码:
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end//这里是创建适配器所在的包名等
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
#parse("myCustomFileHeader.java")//这是一个类的描述,比如类名称,创建时间,创建者等信息,这也是可以自定义的
public class ${NAME} extends RecyclerView.Adapter<${NAME}.${ViewHolder}Holder>{//${NAME}就是一开始输入的类名,MyAdapter
private Context mContext;
private List<${MyBean}> m${MyBean}s;//Item类型,在上面的截图中可以看到的,是可以输入的,上面输入的是String
private LayoutInflater mLayoutInflater;
private On${MyBean}ItemClickListener mOn${MyBean}ItemClickListener;
public void setOn${MyBean}ItemClickListener(On${MyBean}ItemClickListener on${MyBean}ItemClickListener){
mOn${MyBean}ItemClickListener = on${MyBean}ItemClickListener;
}
public ${NAME}(Context context, List<${MyBean}> m${MyBean}s) {
mContext = context;
this.m${MyBean}s = m${MyBean}s;
mLayoutInflater = LayoutInflater.from(mContext);
}
@Override
public ${ViewHolder}Holder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mLayoutInflater.inflate(,parent,false);
return new ${ViewHolder}Holder (view);
}
@Override
public void onBindViewHolder(${ViewHolder}Holder holder, int position) {
}
@Override
public int getItemCount() {
return m${MyBean}s.size();
}
class ${ViewHolder}Holder extends RecyclerView.ViewHolder{//同理,这个 ${ViewHolder}也是可以输入的,上面输入的是MY
public ${ViewHolder}Holder(View itemView) {
super(itemView);
}
}
interface On${MyBean}ItemClickListener{//这里是自定义的回调接口,作为每个Item点击事件的回调,这个根据需要要决定就行了。
void on${MyBean}Click(View v,int position);
}
}
注:${NAME},${MyBean},${ViewHolder},看到这三个的写法了吗,其实我们需要手动输入的变量就可以使用这种 ${xxx} 的写法了,任你自定义。
编辑好自己的代码模板后,apply一下,就可以使用了。
看下来是不是感觉很简单,觉得有用可以自己马上动手试一下写一个属于自己的代码模板吧,从此告别每次都要自己再写一遍适配器的窘境了。