import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public abstract class BaseRecyclerAdapter<D, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> { /** * 数据源 */ private List<D> data; /** * 布局资源id */ private int layoutResId; public BaseRecyclerAdapter(int layoutResId, List<D> data) { this.data = data == null ? new ArrayList<D>() : data; if (layoutResId != 0) { this.layoutResId = layoutResId; } else { throw new NullPointerException("请设置Item资源id"); } } public void addData(List<D> datas) { if (datas != null) { data.addAll(datas); notifyDataSetChanged(); } } public void refreshData(List<D> datas) { if (datas != null) { data.clear(); data.addAll(datas); notifyDataSetChanged(); } } @Override public VH onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(layoutResId, parent, false); return (VH) new BaseViewHolder(view); } @Override public void onBindViewHolder(VH holder, int position) { bindTheData(holder, data.get(position)); } @Override public int getItemCount() { return data.size(); } protected abstract void bindTheData(VH holder, D data); public class BaseViewHolder extends RecyclerView.ViewHolder { public BaseViewHolder(View itemView) { super(itemView); } } }
应用:
public class LeaveMessageAdapter extends BaseRecyclerAdapter<LeaveMessageListResponse.ResultDTO, BaseRecyclerAdapter.BaseViewHolder> { public LeaveMessageAdapter(int layoutResId, List<LeaveMessageListResponse.ResultDTO> data) { super(R.layout.item_leave_message, data); } @Override protected void bindTheData(BaseRecyclerAdapter.BaseViewHolder holder, LeaveMessageListResponse.ResultDTO data) { TextView tvTitle = holder.itemView.findViewById(R.id.tv_title); TextView tvContent = holder.itemView.findViewById(R.id.tv_content); tvTitle.setText(data.getNr()); tvContent.setText(data.getCreate_date()); } }