HolderView 与 ViewHolder 优化App性能

HolderView 与 ViewHolder做Android的伙伴都不会陌生吧,都是为了提升ListView、gridView等这类View的adapter性能,

把多个属性封装到一个类中,也就是面向对象的思想。

ViewHolder实在adapter中建立一个对象,但是没有做任何的业务逻辑,所有的逻辑还是在adapter的getView中实现,这样就显得

adapter特别臃肿。

HolderView就是为了解决adapter的臃肿问题,把逻辑处理方到HolderView中实现,在adapter中只是调用HolderView就ok了

实现代码:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class HolderView extends GridLayout {  
  2.    
  3.     private TextView mDigitDigit;  
  4.     private TextView mDigitHex;  
  5.     private TextView mDigitOct;  
  6.    
  7.     private TextView mDigitEven;  
  8.     private TextView mDigitPrime;  
  9.     private TextView mDigitFibonacci;  
  10.    
  11.     private String mDigitText;  
  12.     private String mDigitHexText;  
  13.     private String mDigitOctText;  
  14.    
  15.     private String mDigitEvenText;  
  16.     private String mDigitPrimtText;  
  17.     private String mDigitFibonacciText;  
  18.    
  19.     public HolderView(Context context) {  
  20.         super(context);  
  21.         initlialize(context);  
  22.     }  
  23.    
  24.     public HolderView(Context context, AttributeSet attrs) {  
  25.         super(context, attrs);  
  26.         initlialize(context);  
  27.     }  
  28.    
  29.     public HolderView(Context context, AttributeSet attrs, int defStyle) {  
  30.         super(context, attrs, defStyle);  
  31.         initlialize(context);  
  32.     }  
  33.    
  34.     public void initlialize(Context context) {  
  35.         View v = LayoutInflater.from(context).inflate(R.layout.list_detail, this);  
  36.         mDigitDigit = (TextView) v.findViewById(R.id.list_detail_digit);  
  37.         mDigitHex = (TextView) v.findViewById(R.id.list_detail_digit_hex);  
  38.         mDigitOct = (TextView) v.findViewById(R.id.list_detail_digit_oct);  
  39.         mDigitEven = (TextView) v.findViewById(R.id.list_detail_digit_even);  
  40.         mDigitPrime = (TextView) v.findViewById(R.id.list_detail_digit_prime);  
  41.         mDigitFibonacci = (TextView) v.findViewById(R.id.list_detail_digit_fibonacci);  
  42.    
  43.         mDigitText = context.getResources().getString(R.string.list_detail_digit);  
  44.         mDigitHexText = context.getResources().getString(R.string.list_detail_digit_hex);  
  45.         mDigitOctText = context.getResources().getString(R.string.list_detail_digit_oct);  
  46.         mDigitEvenText = context.getResources().getString(R.string.list_detail_digit_even);  
  47.         mDigitPrimtText = context.getResources().getString(R.string.list_detail_digit_prime);  
  48.         mDigitFibonacciText = context.getResources().getString(R.string.list_detail_digit_fibonacci);  
  49.     }  
  50.    
  51.     public void bind(Digit digit) {  
  52.         mDigitDigit.setText(String.format(mDigitText, digit));  
  53.         mDigitOct.setText(String.format(mDigitOctText, digit.toOctalString()));  
  54.         mDigitHex.setText(String.format(mDigitHexText, digit.toHexString()));  
  55.    
  56.         mDigitEven.setText(String.format(mDigitEvenText, digit.isEven()));  
  57.         mDigitPrime.setText(String.format(mDigitPrimtText, digit.isPrime()));  
  58.         mDigitFibonacci.setText(String.format(mDigitFibonacciText, digit.isFibonacci()));  
  59.     }  
  60.    
  61. }  

adapter:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class ItemAdapter extends BaseAdapter {  
  2.    
  3.     private final Context mContext;  
  4.    
  5.     private int count = 256;  
  6.    
  7.     public ItemAdapter(Context context) {  
  8.         mContext = context;  
  9.     }  
  10.    
  11.     @Override  
  12.     public int getCount() {  
  13.         return count;  
  14.     }  
  15.    
  16.     @Override  
  17.     public Object getItem(int i) {  
  18.         return i;  
  19.     }  
  20.    
  21.     @Override  
  22.     public long getItemId(int i) {  
  23.         return i;  
  24.     }  
  25.    
  26.     @Override  
  27.     public View getView(int i, View convertView, ViewGroup viewGroup) {  
  28.         HolderView holderView;  
  29.         // Important to not just null check, but rather to a instanceof  
  30.         // since we might get any subclass of view here.  
  31.         if (convertView instanceof HolderView) {  
  32.             holderView = (HolderView) convertView;  
  33.         } else {  
  34.             holderView = new HolderView(mContext);  
  35.         }  
  36.         holderView.bind(new Digit(i));  
  37.    
  38.         return holderView;  
  39.     }  
  40. }  

list_dateil.xml


[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <merge xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.    
  4.     <TextView  
  5.         android:id="@+id/list_detail_digit"  
  6.         android:layout_width="wrap_content"  
  7.         android:layout_height="wrap_content"  
  8.         android:layout_column="0"  
  9.         android:layout_gravity="left|top"  
  10.         android:layout_row="0"  
  11.         android:padding="8dip" />  
  12.            
  13.     <TextView  
  14.         android:id="@+id/list_detail_digit_oct"  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:layout_column="1"  
  18.         android:layout_gravity="left|top"  
  19.         android:layout_row="0"  
  20.         android:padding="8dip" />  
  21.           
  22.     <TextView  
  23.         android:id="@+id/list_detail_digit_hex"  
  24.         android:layout_width="wrap_content"  
  25.         android:layout_height="wrap_content"  
  26.         android:layout_column="2"  
  27.         android:layout_gravity="left|top"  
  28.         android:layout_row="0"  
  29.         android:padding="8dip" />  
  30.        
  31.     <TextView  
  32.         android:id="@+id/list_detail_digit_even"  
  33.         android:layout_width="wrap_content"  
  34.         android:layout_height="wrap_content"  
  35.         android:layout_column="0"  
  36.         android:layout_gravity="left|top"  
  37.         android:layout_row="1"  
  38.         android:padding="8dip" />  
  39.    
  40.     <TextView  
  41.         android:id="@+id/list_detail_digit_prime"  
  42.         android:layout_width="wrap_content"  
  43.         android:layout_height="wrap_content"  
  44.         android:layout_column="1"  
  45.         android:layout_gravity="left|top"  
  46.         android:layout_row="1"  
  47.         android:padding="8dip" />  
  48.    
  49.     <TextView  
  50.         android:id="@+id/list_detail_digit_fibonacci"  
  51.         android:layout_width="wrap_content"  
  52.         android:layout_height="wrap_content"  
  53.         android:layout_column="2"  
  54.         android:layout_gravity="left|top"  
  55.         android:layout_row="1"  
  56.         android:padding="8dip" />  
  57.        
  58.    
  59. </merge>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值