BaseAdapter.java 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package com.android.chmo.ui.adpater;
  2. import android.support.annotation.NonNull;
  3. import android.support.v7.widget.RecyclerView;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. public abstract class BaseAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter {
  9. private List<View> headerViews;
  10. private List<View> footerViews;
  11. public BaseAdapter() {
  12. headerViews = new ArrayList<>();
  13. footerViews = new ArrayList<>();
  14. }
  15. public void addHeaderView(View view) {
  16. headerViews.add(view);
  17. }
  18. @NonNull
  19. @Override
  20. public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
  21. if (i < headerViews.size()) {
  22. return new HeaderFooterHolder(headerViews.get(i));
  23. } else if (i < (headerViews.size() + getDataCount())) {
  24. return getViewHolder(viewGroup, i - headerViews.size());
  25. } else {
  26. return new HeaderFooterHolder(footerViews.get(i - headerViews.size() - getDataCount()));
  27. }
  28. }
  29. @Override
  30. public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
  31. if (i >= headerViews.size() && i < (headerViews.size() + getDataCount())) {
  32. updateViewHolder((VH) viewHolder, i - headerViews.size());
  33. }
  34. }
  35. @Override
  36. public int getItemCount() {
  37. return getDataCount() + headerViews.size() + footerViews.size();
  38. }
  39. @Override
  40. public int getItemViewType(int position) {
  41. return position;
  42. }
  43. protected abstract int getDataCount();
  44. protected abstract VH getViewHolder(@NonNull ViewGroup viewGroup, int position);
  45. protected abstract void updateViewHolder(@NonNull VH holder, int position);
  46. class HeaderFooterHolder extends RecyclerView.ViewHolder {
  47. public HeaderFooterHolder(@NonNull View itemView) {
  48. super(itemView);
  49. }
  50. }
  51. }