ListView简单学习_各方资料综合心得

android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局。
需要配合适配器使用,选用适配器时,可以选用arrayAdapter,SimpleAdapter等,最常用baseAdapter.
ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作。也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点。读者可以试试用SimpleAdapter添加一个按钮到ListView的条目中,会发现可以添加,但是却无法获得焦点,点击操作被ListViewItem所覆盖。这时候最方便的方法就是使用灵活的适配器BaseAdapter了。
自定义adapter继承baseAdapter, 一般情况下步骤:
1.构造方法,用于传递context,数据源
2.public int getCount() //获得展示数据条数

3.public Object getItem(int position) //获取第position个item的内容
4.public long getItemId(int position)//获得当前item在第几行
5.public View getView(int position, View convertView, ViewGroup parent) 

getView通常最优化方案使用viewHolder+convertView使用
ViewHolder:通常出现在适配器里,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提升性能。
类似于模具,将得到的view存到缓冲view(设置标签),下次通过标签获取继续使用,不需要重复创建对象和findviewByID,占用系统资源。

convertView:重用缓存convertView传递给getView()方法来避免填充不必要的视图。

public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		//如此写会造成重复的构建textview,严重占用资源
		// resource:layout 布局文件
		// root:当前item的view在哪个ViewGroup中 一般返回parent
		// attachToRoot:需要再次将view贴在ViewGroup中吗?
		//convertView:之前是否有这个view,缓存的view
		/*View view=LayoutInflater.from(context).inflate(R.layout.base_adapter, parent, false);
		TextView mTextView=(TextView) view.findViewById(R.id.txt_newsItem);
		mTextView.setText(dataList.get(position));*/
		//优化方案
		ViewHolder mHolder = null;
		if (convertView == null) {
			mHolder = new ViewHolder();
			convertView = LayoutInflater.from(context).inflate(R.layout.base_adapter, null);
			mHolder.textView = (TextView) convertView.findViewById(R.id.txt_newsItem);
			//将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
			convertView.setTag(mHolder);
		} else {
			mHolder = (ViewHolder) convertView.getTag();
		}
		
		mHolder.textView.setText(dataList.get(position));
		return convertView;
	}
	class ViewHolder {
		TextView textView;
	}


模具里加入需要显示的控件如textview.imageview等,然后将模具加载到convertView上, 也就是每一条item

当我们判断 convertView == null  的时候,如果为空,就会根据设计好的List的Item布局(XML),来为convertView赋值,并生成一个viewHolder来绑定converView里面的各个View控件(XML布局里面的那些控件)。再用convertView的setTag将viewHolder设置到Tag中,绑定convertView,以便系统第二次绘制ListView时从Tag中取出。

如果convertView不为空的时候,就会直接用convertView的getTag(),来获得一个ViewHolder。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值