參看網上寫的萬能模闆,求改進
package com.lcj.demo1.adapter;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
/**
*
* RecyclerView的萬能擴充卡模闆
*/
public abstract class CommonAdapter<T> extends RecyclerView.Adapter<CommonAdapter.VH> {
private List<T> mData;
public CommonAdapter() {
}
public CommonAdapter(List<T> mData) {
this.mData = mData;
}
public abstract int getLayoutId(int viewType);
@Override
public VH onCreateViewHolder(ViewGroup parent, int viewType) {
// 要根據不同的ViewType來封裝對應的ViewHolder
return VH.get(parent, getLayoutId(viewType));
}
@Override
public void onBindViewHolder(VH holder, int position) {
convert(holder, mData.get(position), position);
}
/**
* 往View上填充資料
* @param holder
* @param data
* @param position
*/
public abstract void convert(VH holder, T data, int position);
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public int getItemCount() {
return mData.size();
}
public static class VH extends RecyclerView.ViewHolder {
private SparseArray<View> mViews;
private View mConvertView;
public VH(View itemView) {
super(itemView);
mConvertView = itemView;
}
public static VH get(ViewGroup parent, int layoutId) {
View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
return new VH(view);
}
public <T extends View> T getView(int id) {
View view = mViews.get(id);
if (view == null) {
view = mConvertView.findViewById(id);
mViews.put(id, view);
}
return (T) view;
}
/**
* 填充對應控件的方法 可以寫n多個
* @param id
* @param str
*/
public void setText(int id, String str) {
TextView view = getView(id);
view.setText(str);
}
public void setImage(int id, int imageId) {
ImageView view = getView(id);
view.setImageResource(imageId);
}
// ...
}
}