HolderView vs ViewHolder实例

来源:互联网 发布:jsp引入js文件 编辑:程序博客网 时间:2024/05/17 08:53

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

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

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

adapter特别臃肿。

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

实现代码:

public class HolderView extends GridLayout {     private TextView mDigitDigit;    private TextView mDigitHex;    private TextView mDigitOct;     private TextView mDigitEven;    private TextView mDigitPrime;    private TextView mDigitFibonacci;     private String mDigitText;    private String mDigitHexText;    private String mDigitOctText;     private String mDigitEvenText;    private String mDigitPrimtText;    private String mDigitFibonacciText;     public HolderView(Context context) {        super(context);        initlialize(context);    }     public HolderView(Context context, AttributeSet attrs) {        super(context, attrs);        initlialize(context);    }     public HolderView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        initlialize(context);    }     public void initlialize(Context context) {        View v = LayoutInflater.from(context).inflate(R.layout.list_detail, this);        mDigitDigit = (TextView) v.findViewById(R.id.list_detail_digit);        mDigitHex = (TextView) v.findViewById(R.id.list_detail_digit_hex);        mDigitOct = (TextView) v.findViewById(R.id.list_detail_digit_oct);        mDigitEven = (TextView) v.findViewById(R.id.list_detail_digit_even);        mDigitPrime = (TextView) v.findViewById(R.id.list_detail_digit_prime);        mDigitFibonacci = (TextView) v.findViewById(R.id.list_detail_digit_fibonacci);         mDigitText = context.getResources().getString(R.string.list_detail_digit);        mDigitHexText = context.getResources().getString(R.string.list_detail_digit_hex);        mDigitOctText = context.getResources().getString(R.string.list_detail_digit_oct);        mDigitEvenText = context.getResources().getString(R.string.list_detail_digit_even);        mDigitPrimtText = context.getResources().getString(R.string.list_detail_digit_prime);        mDigitFibonacciText = context.getResources().getString(R.string.list_detail_digit_fibonacci);    }     public void bind(Digit digit) {        mDigitDigit.setText(String.format(mDigitText, digit));        mDigitOct.setText(String.format(mDigitOctText, digit.toOctalString()));        mDigitHex.setText(String.format(mDigitHexText, digit.toHexString()));         mDigitEven.setText(String.format(mDigitEvenText, digit.isEven()));        mDigitPrime.setText(String.format(mDigitPrimtText, digit.isPrime()));        mDigitFibonacci.setText(String.format(mDigitFibonacciText, digit.isFibonacci()));    } }

adapter:

public class ItemAdapter extends BaseAdapter {     private final Context mContext;     private int count = 256;     public ItemAdapter(Context context) {        mContext = context;    }     @Override    public int getCount() {        return count;    }     @Override    public Object getItem(int i) {        return i;    }     @Override    public long getItemId(int i) {        return i;    }     @Override    public View getView(int i, View convertView, ViewGroup viewGroup) {        HolderView holderView;        // Important to not just null check, but rather to a instanceof        // since we might get any subclass of view here.        if (convertView instanceof HolderView) {            holderView = (HolderView) convertView;        } else {            holderView = new HolderView(mContext);        }        holderView.bind(new Digit(i));         return holderView;    }}

list_dateil.xml


<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android" >     <TextView        android:id="@+id/list_detail_digit"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_column="0"        android:layout_gravity="left|top"        android:layout_row="0"        android:padding="8dip" />             <TextView        android:id="@+id/list_detail_digit_oct"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_column="1"        android:layout_gravity="left|top"        android:layout_row="0"        android:padding="8dip" />            <TextView        android:id="@+id/list_detail_digit_hex"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_column="2"        android:layout_gravity="left|top"        android:layout_row="0"        android:padding="8dip" />         <TextView        android:id="@+id/list_detail_digit_even"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_column="0"        android:layout_gravity="left|top"        android:layout_row="1"        android:padding="8dip" />     <TextView        android:id="@+id/list_detail_digit_prime"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_column="1"        android:layout_gravity="left|top"        android:layout_row="1"        android:padding="8dip" />     <TextView        android:id="@+id/list_detail_digit_fibonacci"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_column="2"        android:layout_gravity="left|top"        android:layout_row="1"        android:padding="8dip" />      </merge>



1 0
原创粉丝点击