自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

RecyclerView適配器的超省寫法

移動開發(fā)
RecycleView 作為新出的控件.他規(guī)范了 Viewholder 的寫法.但是總感覺適配器的寫法過于冗長.怎么辦呢?

[[144456]]

RecycleView 作為新出的控件.他規(guī)范了 Viewholder 的寫法.

但是總感覺適配器的寫法過于冗長.怎么辦呢?

我們來簡化他.

ViewHolder 的實現(xiàn)方式和ListView適配器的超省寫法中的ViewHodler 是一樣的

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.  

我們繼承 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.     } 

RVHolder.class 繼承 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.  

到此,結(jié)束了

我們新寫的適配器繼承AutoRVAdapter 實現(xiàn)onCreateViewLayoutID 和 onBindViewHolder 方法即可.

onCreateViewLayoutID->返回item 的布局.

onBindViewHolder->綁定數(shù)據(jù)源.

  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.     } 

 

責(zé)任編輯:倪明 來源: 簡書
相關(guān)推薦

2012-09-19 15:29:26

Worklight適配器

2018-10-11 10:38:31

前端JavaScript編程語言

2022-02-18 17:21:29

適配器模式客戶端

2020-10-25 08:56:21

適配器模式

2022-02-13 23:33:24

設(shè)計模式Java

2021-02-16 08:16:09

適配器模式MybatisJava

2021-08-06 06:51:16

適配器配置Spring

2011-04-28 09:54:50

jQuery

2013-11-26 16:39:21

Android設(shè)計模式

2021-02-18 08:39:28

設(shè)計模式場景

2012-05-16 17:22:11

Java設(shè)計模式

2009-11-18 18:08:20

PHP適配器模式

2009-12-21 10:26:09

Oracle適配器

2012-08-02 10:46:34

JavaAdapter模式

2010-07-09 12:53:30

HART協(xié)議

2014-12-17 09:57:01

AndroidAdapteViewHolder

2013-02-26 10:55:47

C#適配器設(shè)計模式

2012-12-10 10:53:04

IBMdW

2010-12-23 13:56:34

網(wǎng)絡(luò)適配器

2022-05-29 22:55:00

適配器設(shè)計模式
點贊
收藏

51CTO技術(shù)棧公眾號