android ViewHolder修饰符选择

转载自http://blog.csdn.net/zhaokaiqiang1992
现在大家都知道用ViewHolder来实现listview的优化了,但是,ViewHolder到底要用什么来修饰呢?这种修饰有什么意义呢?在一个ListView里面,存在多少个VIewHolder实例呢?为什么VIewHolder能够减少findview的次数,优化效率呢?为了弄清楚这个问题,我做了以下测试,测试代码很简单,如下:

public class MainActivity extends Activity {

	public static int itemId = 1;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		ListView listView = new ListView(this);
		listView.setAdapter(new MyAdapter());
		setContentView(listView);

	}

	private class MyAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return 50;
		}

		@Override
		public Object getItem(int position) {
			return position;
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {

			ViewHolder viewHolder = null;

			if (convertView == null) {
				convertView = getLayoutInflater().inflate(R.layout.item,
						parent, false);
				viewHolder = new ViewHolder();
				viewHolder.tv = (TextView) convertView.findViewById(R.id.tv);
				convertView.setTag(viewHolder);
			} else {
				viewHolder = (ViewHolder) convertView.getTag();
			}

			viewHolder.tv.setText("item" + position);

			Log.d("TAG", "position=" + position + "---" + viewHolder.toString());

			return convertView;
		}

	}

	
	private  class ViewHolder {
//	private static class ViewHolder {
//	private final class ViewHolder {
//	private static final class ViewHolder {

		private int id;

		public ViewHolder() {
			id = itemId;
			Log.d("TAG", "ViewHolder" + id);
			itemId++;
		}

		TextView tv;

		@Override
		public String toString() {
			return "--------id=" + id;
		}

	}
}

    我简单说一下代码是什么意思,ViewHolder有一个成员变量id,在toString()使用,用来区分不同的ViewHolder,在构造函数中,对id进行赋值,itemId是一个静态变量,每初始化一次就+1,我们可以根据构造函数的打印次数,来计算ViewHolder的实例化次数,根据toString()可以来判断到底是使用了哪一个ViewHolder。getVIew中的写法是固定的,下面是测试结果:

    private class ViewHolder修饰,界面内可见的item数量是9个,ViewHolder初始化了10次,之后开始复用ViewHolder。


    private static class ViewHolder修饰,界面内可见的item数量是9个,ViewHolder初始化了10次,之后开始复用ViewHolder。


    private final class ViewHolder修饰,界面内可见的item数量是9个,ViewHolder初始化了10次,之后开始复用ViewHolder。


    private static final class ViewHolder修饰,完全一样!


     因为这几种完全一样,不管用什么修饰,ViewHolder都会初始化当前界面可见item的数量+1次,和convertView的实例化次数是一样的,因此,我么不管使用什么修饰都是没问题的。static修饰类,在这里是静态内部类,并不是说只存在一个实例,而是可以访问外部类的静态变量,final修饰类则是不让该类继承,我们这里使用final毫无根据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值