既然是萬能適配器,那麼無論什麼適配器,我們寫適配器就因該有一個固定的思想,具體實現是絕對不能寫在適配器裏的,如果實現寫在了適配器裏,那麼適配器就不是萬能適配器了
1.適配器代碼
public abstract class Myadapter <T>extends RecyclerView.Adapter <BaseRViewHouder>{
Context context;
int[] layoutId;
ArrayList<T> list;
public Myadapter(Context context, int[] layoutId, ArrayList<T> list) {
this.context = context;
this.layoutId = layoutId;
this.list = list;
}
//綁定行佈局
public abstract BaseRViewHouder bindMyView(@NonNull ViewGroup parent, int viewType);
@NonNull
@Override
public BaseRViewHouder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return bindMyView(parent,viewType);
}
//綁定數據
public abstract void bind(BaseRViewHouder holder, int position);
@Override
public void onBindViewHolder(@NonNull BaseRViewHouder holder, int position) {
bind(holder,position);
}
@Override
public int getItemCount() {
return list.size();
}
2.ViewHouder代碼
public class BaseRViewHouder extends RecyclerView.ViewHolder {
SparseArray<View> array=new SparseArray<>();
public BaseRViewHouder(@NonNull View itemView) {
super(itemView);
}
public View getView(int id){
View view=array.get(id);
if(view==null){
view = itemView.findViewById(id);
array.put(id,view);
}
return view;
}
public void setText(int id,String text){
View view = getView(id);
if(view!=null){
TextView textView= (TextView) view;
textView.setText(text);
}
}
public void setImage(int id,String image){
View view = getView(id);
if(view!=null){
ImageView imageView= (ImageView) view;
if(!image.equals("")){
Picasso.get().load(image).into(imageView);
}
}
}
}
3.外部使用適配器時候的代碼
final int[] layout = new int[]{R.layout.f1,R.layout.f4};
myadapter = new Myadapter4<Info>(this, layout, datas) {
@Override
public int getItemViewType(int position) {
return datas.get(position).flag;
}
@Override
public BaseRViewHouder bindMyView(@NonNull ViewGroup parent, int viewType) {
View view=null;
BaseRViewHouder houder=null;
if(viewType==0){
view = LayoutInflater.from(context).inflate(layout[0], parent, false);
}else {
view = LayoutInflater.from(context).inflate(layout[1], parent, false);
}
houder = new BaseRViewHouder(view);
return houder;
}
@Override
public void bind(BaseRViewHouder holder, int position) {
if(list.get(position).flag==0){
holder.setImage(R.id.zuoimg,datas.get(position).img);
holder.setText(R.id.zuotext,datas.get(position).text);
}else{
holder.setImage(R.id.youimg,datas.get(position).img);
holder.setText(R.id.youtext,datas.get(position).text);
}
}
};
recyclerView.setAdapter(myadapter);