这篇文章其实不用图片但是出于喜欢贴图就贴出一副不太美观的列表把
1.首先我们需要写一个共通的viewHolder用来完成我们对于view的各种操作
/**
* Created by Administrator on 2018/2/25.
* 共通viewHolder用来完成各种view的操作
* 下面的功能比较少需要的童鞋可以根据自身业务需求添加方法
*/
public class CommonViewHolder extends RecyclerView.ViewHolder {
private View itemView;
public CommonViewHolder(View itemView) {
super(itemView);
this.itemView = itemView;
}
public View getView(int id) {
return itemView.findViewById(id);
}
public CommonViewHolder setText(int id, CharSequence text) {
((TextView) getView(id)).setText(text);
return this;
}
}
2.之后我们需要添加一个MultiTypeSupport类用于通过数据或者position来控制我们的的item布局类型
public interface MultiTypeSupport<T> {
public int getViewId(T t, int position);
}
3.再然后我们就是要完成我们的共通adapter了
/**
* Created by Administrator on 2018/2/25.
* 共通Adapter
*/
public abstract class CommonAdapter<T> extends RecyclerView.Adapter<CommonViewHolder> {
private List<T> dates;//数据
private LayoutInflater inflater;//布局inflater
private int viewId;//布局的id
private MultiTypeSupport<T> typeSupport;//多布局支持
public CommonAdapter(Context context, List<T> dates, int viewId) {
this.dates = dates;
this.viewId = viewId;
inflater = LayoutInflater.from(context);
}
public CommonAdapter(Context context, List<T> dates, MultiTypeSupport<T> typeSupport) {
this.dates = dates;
this.typeSupport = typeSupport;
inflater = LayoutInflater.from(context);
}
@Override
public int getItemViewType(int position) {
//多布局支持添加
if (typeSupport != null) {
return typeSupport.getViewId(dates.get(position), position);
}
return super.getItemViewType(position);
}
@Override
public CommonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//多布局支持添加
if (typeSupport != null) {
viewId = viewType;
}
return new CommonViewHolder(inflater.inflate(viewId, null));
}
@Override
public void onBindViewHolder(CommonViewHolder holder, int position) {
bindTheViewHolder(holder, dates.get(position));
}
public abstract void bindTheViewHolder(CommonViewHolder holder, T date);
@Override
public int getItemCount() {
return dates.size();
}
}
4.最后是我们的activity中的调用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
final List<String> items = new ArrayList<>();
for (int i = ; i < ; i++) {
items.add("-----" + i + "-----");
}
RecyclerView rc_main = (RecyclerView) findViewById(R.id.rc_main);
rc_main.setLayoutManager(new LinearLayoutManager(Main2Activity.this, LinearLayoutManager.VERTICAL, false));
// rc_main.setAdapter(new MyAdapter(Main2Activity.this, items, R.layout.item_vg));
rc_main.setAdapter(new MyAdapter(Main2Activity.this, items, new MultiTypeSupport<String>() {
@Override
public int getViewId(String s, int position) {
return R.layout.item_vg;
}
}));
}
class MyAdapter extends CommonAdapter<String> {
public MyAdapter(Context context, List<String> dates, MultiTypeSupport<String> typeSupport) {
super(context, dates, typeSupport);
}
/*MyAdapter(Context context, List<String> dates, int viewId) {
super(context, dates, viewId);
}
*/
@Override
public void bindTheViewHolder(CommonViewHolder holder, String date) {
holder.setText(R.id.tv_content, date);
}
}
这里我才用了两种方式的调用都是可以的,不明白的童鞋欢迎留言。