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
- HolderView vs ViewHolder实例
- ViewHolder vs HolderView
- ViewHolder VS HolderView ?
- ListView优化adapter getview的两种方式ViewHolder vs HolderView
- ListView优化adapter getview的两种方式ViewHolder vs HolderView
- ListView优化adapter getview的两种方式ViewHolder vs HolderView
- HolderView 与 ViewHolder 优化App性能
- [译]RecyclerView.ViewHolder - getLayoutPosition vs getAdapterPosition
- ViewHolder
- ViewHolder
- ViewHolder
- ViewHolder
- viewholder
- 从HolderView加载ListView异常
- ListView——HolderView方式
- grep实例 Vs find实例
- Android HolderView实现的数据源(Adapter)
- VS调试C++项目实例
- Java初学者入门需掌握的30个基本概念二
- JMS学习笔记(五)——持久的订阅
- 递推—杭电1465 不容易系列之一
- 《APUE》chapter 18 Terminal I/O 学习笔记(加上自己的代码)
- poj3615
- HolderView vs ViewHolder实例
- MySql接口API函数综述
- 数值的整数次方
- 在iOS7中UIPageControl的改变
- EasyUI的tabs使用
- CAAnimation相关
- Java和JSP编程应该注意的六个常见问题
- css 清除浮动的方法
- freemarker标记实现翻页