Super shorthand for RecyclerView adapter

Super shorthand for RecyclerView adapter

[[144456]]

RecycleView is a new control. It standardizes the writing of Viewholder.

But I always feel that the writing of the adapter is too lengthy. What should I do?

Let's simplify it.

The implementation of ViewHolder is the same as ViewHolder in the super-saving writing of ListView adapter

ViewHolder.class

  1. public   class ViewHolder {
  2. private SparseArray<View> viewHolder;
  3. private View view;
  4.  
  5. public   static ViewHolder getViewHolder(View view){
  6. ViewHolder viewHolder = (ViewHolder) view.getTag();
  7. if (viewHolder == null ) {
  8. viewHolder = new ViewHolder(view);
  9. view.setTag(viewHolder);
  10. }
  11. return viewHolder;
  12. }
  13. private ViewHolder(View view) {
  14. this .view = view;
  15. viewHolder = new SparseArray<View>();
  16. view.setTag(viewHolder);
  17. }
  18. public <T extends View> T get( int id) {
  19. View childView = viewHolder.get(id);
  20. if (childView == null ) {
  21. childView = view.findViewById(id);
  22. viewHolder.put(id, childView);
  23. }
  24. return (T) childView;
  25. }
  26.  
  27. public View getConvertView() {
  28. return view;
  29. }
  30.  
  31. public TextView getTextView( int id) {
  32.  
  33. return get(id);
  34. }
  35. public Button getButton( int id) {
  36.  
  37. return get(id);
  38. }
  39.  
  40. public ImageView getImageView( int id) {
  41. return get(id);
  42. }
  43.  
  44. public   void setTextView( int id,CharSequence charSequence){
  45. getTextView(id).setText(charSequence);
  46. }
  47.  
  48. }

We inherit RecyclerView.Adapter<RVHolder>

AutoRVAdapter.class

  1. public   abstract   class AutoRVAdapter extends RecyclerView.Adapter<RVHolder> {
  2.  
  3.  
  4. public List<?> list;
  5.  
  6. private Context context;
  7.  
  8. public AutoRVAdapter(Context context, List<?> list) {
  9. this .list = list;
  10. this .context = context;
  11. }
  12.  
  13. @Override  
  14. public RVHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  15. View view = LayoutInflater.from(context).inflate(onCreateViewLayoutID(viewType), null );
  16.  
  17. return   new RVHolder(view);
  18. }
  19.  
  20. public   abstract   int onCreateViewLayoutID( int viewType);
  21.  
  22.  
  23. @Override  
  24. public   void onViewRecycled( final RVHolder holder) {
  25. super .onViewRecycled(holder);
  26. }
  27.  
  28. @Override  
  29. public   void onBindViewHolder( final RVHolder holder, final   int position) {
  30.  
  31. onBindViewHolder(holder.getViewHolder(), position);
  32. if (onItemClickListener != null ) {
  33. holder.itemView.setOnClickListener( new View.OnClickListener() {
  34. @Override  
  35. public   void onClick(View v) {
  36. onItemClickListener.onItemClick( null , v, holder.getPosition(), holder.getItemId());
  37. }
  38. });
  39. }
  40.  
  41. }
  42.  
  43. public   abstract   void onBindViewHolder(ViewHolder holder, int position);
  44.  
  45. @Override  
  46. public   int getItemCount() {
  47. return list.size();
  48. }
  49.  
  50. private AdapterView.OnItemClickListener onItemClickListener;
  51.  
  52. public AdapterView.OnItemClickListener getOnItemClickListener() {
  53. return onItemClickListener;
  54. }
  55.  
  56. public   void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
  57. this .onItemClickListener = onItemClickListener;
  58. }
  59. }

RVHolder.class inherits RecyclerView.ViewHolder

  1. public   class RVHolder extends RecyclerView.ViewHolder {
  2.  
  3.  
  4. private ViewHolder viewHolder;
  5.  
  6. public RVHolder(View itemView) {
  7. super (itemView);
  8. viewHolder=ViewHolder.getViewHolder(itemView);
  9. }
  10.  
  11.  
  12. public ViewHolder getViewHolder() {
  13. return viewHolder;
  14. }
  15.  
  16. }

That's it, it's over

Our newly written adapter inherits AutoRVAdapter and implements onCreateViewLayoutID and onBindViewHolder methods.

onCreateViewLayoutID->Returns the layout of the item.

onBindViewHolder->Bind data source.

  1. public   class DemoRVAdapter extends AutoRVAdapter {
  2. public RecyclerAdapter(Context context, List<?> list) {
  3. super (context, list);
  4. }
  5.  
  6. @Override  
  7. public   int onCreateViewLayoutID( int viewType) {
  8. return R.layout.item;
  9. }
  10.  
  11. @Override  
  12. public   void onBindViewHolder(ViewHolder holder, int position) {
  13.  
  14. Entity item=(Entity) list.get(position);
  15. vh.getTextView(R.id.name).setText(item.getName());
  16. vh.getTextView(R.id.age).setText(item.getAge());
  17. vh.setText(R.id.height,item.getHeight());
  18. }
  19. }

<<:  Windows open-sources iOS to Windows porting technology

>>:  Ten days after the Android vulnerability broke out, it changed Google and Samsung

Recommend

The barbaric P2P online lending has seen the dawn of civilization

For the P2P industry, the impact of policies has ...

How to revive an old Douyin account? What issues should you pay attention to?

Every day, many Douyin video users register new a...

Flash floods occur! Remember these to save yourself!

Since June this year, some parts of my country ha...

Tik Tok search user ranking rules, what are the benefits of Tik Tok search?

Nowadays, most people use their free time to watc...

Information flow advertising landing page planning methodology!

The 7 creative rules for information flow adverti...

12 must-have formulas for planners in 2020

Introduction丨Writing a proposal can be fun in thi...

Why did I start to love Audi Q7 after 600 kilometers?

Just like all novels about domineering CEOs, befo...

Git Notes

[[144417]] Preface Git is indeed a very good vers...

Tips for creating a private circle of friends!

In the one month since I started doing private do...