Layout1.7

viewholder的使用

Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。 

优化的思路两种: 

1. View的重用 
    View的每次创建是比较耗时的,因此对于getview方法传入的convertView应充分利用 != null的判断 

2.ViewHolder的应用 

View的findViewById()方法也是比较耗时的,因此需要考虑只调用一次,之后就用View.getTag()方法来获得ViewHolder对象。 

package com.example.android_listview_activity;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

/**
 * @desc	自定义适配器
 * @author	ljt
 * @time	2014年8月27日 上午11:15:27
 */
public class MainActivity5 extends Activity{
	
	private static final String TAG = "MainActivity";
	
	private ListView listView;
	
	private ImageView imageView;
	
	private TextView textView;
	
	private ViewHolder holder;
	
	private int[] images = {R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light,
			R.drawable.abc_ic_go_search_api_holo_light,R.drawable.abc_ic_go_search_api_holo_light
	};
	
	private String[] names = {"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海",
			"北京","上海"
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		listView = (ListView)this.findViewById(R.id.listView1);
		MyAdapter adapter = new MyAdapter();
		listView.setAdapter(adapter);
	}
	
	/**
	 * @desc	自定义适配器
	 * @author	ljt
	 * @time	2014年8月27日 上午11:09:13
	 */
	class MyAdapter extends BaseAdapter{

		/**
		 * How many items are in the data set represented by this Adapter.
		 */
		@Override
		public int getCount() {
			return names.length;
		}

		/**
		 * Get the data item associated with the specified position in the data set.
		 */
		@Override
		public Object getItem(int position) {
			return names[position];
		}
		
		/**
		 * Get the row id associated with the specified position in the list.
		 */
		@Override
		public long getItemId(int position) {
			return position;
		}

		/**
		 * 创建列表项
		 */
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			Log.i(TAG, "position == "+position);
			
			if(null == convertView){
				// 将layout的xml布局文件实例化为View类对象
				convertView = getLayoutInflater().inflate(R.layout.source2,null);
				imageView = (ImageView)convertView.findViewById(R.id.imageView3);
				imageView.setImageResource(images[position]);
				
				textView = (TextView)convertView.findViewById(R.id.textView3);
				textView.setText(names[position]);
				
				holder = new ViewHolder();
				holder.imageView = imageView;
				holder.textView = textView;
				
				convertView.setTag(holder);
			}else{
				holder = (ViewHolder) convertView.getTag();
				holder.imageView.setImageResource(images[position]);
				holder.textView.setText(names[position]);
			}
			
			return convertView;
		}
		
	}
	
	class ViewHolder{
		private ImageView imageView;
		private TextView textView;
	}
	
}

 

猜你喜欢

转载自luan.iteye.com/blog/2109584
1.7
今日推荐