当前位置: 首页 > 科技观察

RecyclerViewadapter的超级省钱方法

时间:2023-03-23 10:15:31 科技观察

RecycleView是一个新控件。规范了Viewholder的写法。但是总觉得adapter的写法太长了。我应该怎么办?让我们简化它。ViewHolder的实现和ListView适配器超省写中的ViewHolder是一样的。视图持有人);}returnviewHolder;}privateViewHolder(Viewview){this.view=view;viewHolder=newSparseArray();view.setTag(viewHolder);}publicTget(intid){ViewchildView=viewHolder.get(id);if(childView==null){childView=view.findViewById(id);viewHolder.put(id,childView);}return(T)childView;}publicViewgetConvertView(){returnview;}publicTextViewgetTextView(intid){returnget(ID);}publicButtongetButton(intid){returnget(id);}publicImageViewgetImageView(intid){returnget(id);}publicvoidsetTextView(intid,CharSequencecharSequence){getTextView(id).setText(charSequence);}}我们继续承接RecyclerView.AdapterAutoRVAdapter.classpublicabstractclassAutoRVAdapterextendsRecyclerView.Adapter{publicListlist;privateContextcontext;publicAutoRVAdapter(Contextcontext,Listlist){this.list=list;this.context=context;}@OverridepublicRVHolderonCreateViewHolder(ViewGroupparent,intviewType){Viewview=LayoutInflater.from(context).inflate(onCreateViewLayoutID(viewType),null);returnnewRVHolder(view);}publicabstractintonCreateViewLayoutID(intviewType);@OverridepublicvoidonViewRecycled(finalRVHolderholder){super.onViewRecycled(holder);}@OverridepublicvoidonBindViewHolder(finalRVHolderholder,finalintposition){onBindViewHolder(holder.getViewHolder(),position);if(onItemClickListener!=null){holder.itemView.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){onItemClickListener.onItemClick(null),v,holder.getPosition(),holder.getItemId());}});}}publicabstractvoidonBindViewHolder(ViewHolderholder,intposition);@OverridepublicintgetItemCount(){returnlist.size();}privateAdapterView.OnItemClickListeneronItemClickListener;publicAdapterView.OnItemClickListenergetOnItemClickListener(){returnonItemClickListener;}publicvoidsetOnItemClickListener(AdapterView.OnItemClickListeneronItemClickListener){this.onItemClickListener=onItemClickListener;}}RVHolder.class继承RecyclerView...onBindViewHolder方法就足够了。onCreateViewLayoutID->返回项目的布局。onBindViewHolder->绑定数据源。publicclassDemoRVAdapterextendsAutoRVAdapter{publicRecyclerAdapter(Contextcontext,Listlist){super(context,list);}@OverridepublicintonCreateViewLayoutID(intviewType){returnR.layout.item;}@OverridepublicvoidonBindViewHolder(ViewHolderholder,intposition){Entityitem=(Entity)list.get(position);vh.getTextView(R.id.name).setText(item.getName());vh.getTextView(R.id.age)。setText(item.getAge());vh.setText(R.id.height,item.getHeight());}}