RecyclerView适配器的封装及实现
一.封装万能适配器BaseAdapter
public abstract class BaseRecyclerAdapter<T,VH extends BaseRecyclerAdapter.BaseHolder>
extends RecyclerView.Adapter<VH>{
private List<T> datas = null;
private Context context;
protected int itemlayoutid;
public BaseRecyclerAdapter(List<T> datas,Context context){
this.datas = datas;
this.context = context;
}
public BaseRecyclerAdapter(List<T> datas){
this.datas = datas;
}
@NonNull
@Override
public abstract VH onCreateViewHolder(@NonNull ViewGroup viewGroup, int i);
@Override
public void onBindViewHolder(@NonNull VH baseHolder, int i) {
bindView_Holder(baseHolder,i);
}
@Override
public int getItemCount() {
return datas.size();
}
public abstract int setItemLayout();
public abstract void bindView_Holder(BaseRecyclerAdapter.BaseHolder baseHolder,int position);
public abstract class BaseHolder extends RecyclerView.ViewHolder{
public BaseHolder(@NonNull View itemView) {
super(itemView);
bindItem(itemView);
}
public abstract void bindItem(View view);
}
}
二.实现Adapter
public class SubAdapter extends BaseRecyclerAdapter{
ArrayList<Bean.T1348647853363Bean> datas;
Context context;
OnClickRecycler clickRecycler;
public SubAdapter(ArrayList<Bean.T1348647853363Bean> datas, Context context,OnClickRecycler onClickRecycler){
super(datas,context);
this.datas = datas;
this.context = context;
this.clickRecycler = onClickRecycler;
}
public SubAdapter(ArrayList<Bean.T1348647853363Bean> datas){
super(datas);
this.datas = datas;
}
public void setContext(Context context){
this.context = context;
}
public void setOnClickRecycler(OnClickRecycler onClickRecycler){
this.clickRecycler = onClickRecycler;
}
@NonNull
@Override
public BaseHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(setItemLayout(),viewGroup,false);
SubAdapter.SubHolder subHolder = new SubAdapter.SubHolder(view);
return subHolder;
}
@Override
public int setItemLayout() {
return R.layout.itemlayout;
}
@Override
public void bindView_Holder(BaseHolder baseHolder, final int position) {
SubAdapter.SubHolder subHolder = (SubAdapter.SubHolder)baseHolder;
Glide.with(context).load(datas.get(position).getImgsrc()).into(subHolder.imageView);
ViewGroup.LayoutParams params = subHolder.textView.getLayoutParams();
int endHeight =(int) (200+Math.random()*(400-200+1));
params.height = endHeight;
subHolder.textView.setLayoutParams(params);
subHolder.textView.setText(datas.get(position).getTitle());
subHolder.imageView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
clickRecycler.longClickRecycler(position);
return true;
}
});
subHolder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickRecycler.clickRecycler(position);
}
});
}
public void addData(Bean.T1348647853363Bean data){
if(data!= null){
datas.add(data);
notifyItemInserted(datas.size()-1);
}
}
public void addDatas(ArrayList<Bean.T1348647853363Bean> allData){
if(datas != null && datas.size()> 0){
int startIndex = datas.size();
datas.addAll(allData);
int endIndex = datas.size();
notifyItemRangeInserted(startIndex,endIndex);
}
}
public void removeData(int postion){
if(postion<= datas.size()){
datas.remove(postion);
notifyItemChanged(postion);
}
}
public void removeAll(){
datas.clear();
notifyDataSetChanged();
}
class SubHolder extends BaseHolder{
private TextView textView;
private ImageView imageView;
public SubHolder(@NonNull View itemView) {
super(itemView);
}
@Override
public void bindItem(View view) {
textView = view.findViewById(R.id.txt_item);
imageView = view.findViewById(R.id.img_item);
}
}
}