关Android ListView中控件定义成全局变量的错误

原创 2016年05月31日 23:06:18

重写getView方法时,由于把item中的控件定义成全局变量,在接下来的复用缓存中把填充布局文件与找控件的代码写成这样

if(convertView == null){
	view = View.inflate(MainActivity.this, R.layout.item_listview, null);
	tv_title = (TextView) view.findViewById(R.id.tv_title);
	tv_text = (TextView) view.findViewById(R.id.tv_text);
	comment = (TextView) view.findViewById(R.id.tv_comment);
	iv = (ImageView) view.findViewById(R.id.iv);
	}
	else{
		view = convertView;
	}
item中的控件只找一次,结果尽管后面每次都重新设置了控件的内容,在下一页的条目都重复了前面内容。

如果条目的控件比较多,应该用ViewHolder:

首先创建一个ViewHolder的内部内,定义所有成员变量;

然后在没有缓存的时候,每次填充View对象时,创建一个ViewHolder对象,然后用view.setTag()方法把ViewHolder对象一一对应的绑定到每天一个item的view对象中,(ViewHolder对象的个数和缓存的个数一样)这样在下次从缓存中取出View对象时同时把ViewHolder取出,不用重新找控件。

public View getView(int position, View convertView, ViewGroup parent) {
			
	View view;
	ViewHolder myHolder = null;
			
	if(convertView == null){
	<span style="white-space:pre">	</span>view = View.inflate(MainActivity.this, R.layout.item_listview, null);
		myHolder = new ViewHolder();
		myHolder.tv_title = (TextView) view.findViewById(R.id.tv_title);
		myHolder.tv_text = (TextView) view.findViewById(R.id.tv_text);
		myHolder.comment = (TextView) view.findViewById(R.id.tv_comment);
		myHolder.iv = (ImageView) view.findViewById(R.id.iv);
		view.setTag(myHolder);
	}
	else{
		view = convertView;
		myHolder = (ViewHolder) view.getTag();
	}
			

	myHolder.tv_title.setText(newsList.get(position).getTitle());
	myHolder.tv_text.setText(newsList.get(position).getText());
	myHolder.comment.setText(newsList.get(position).getComment());
	setImageFromeUrl(myHolder.iv,newsList.get(position).getUrl());
			
	return view;
}
		
class ViewHolder{
	private TextView tv_title;
	private TextView tv_text;
	private TextView comment;
	private ImageView iv;
}



Android开发 在ListView中添加控件

在android课程项目开发过程中,我们小组需要展现一个列表,在列表中实现相对应栏目的编辑等功能,这也就出现了在列表中添加控件的问题。众所周知,android开发中的列表使用ListView实现的,在...
  • pku_android
  • pku_android
  • 2012年05月16日 23:00
  • 3250

Android应用中如何定义全局变量

对于Android初学者来说,经常会遇到多个Activity,怎么在Application中共享全局变量的问题,尤其是Context的共享应用,本篇文章介绍一种Android手机应用共享全局变量。 ...
  • chenbinqq
  • chenbinqq
  • 2014年09月12日 14:56
  • 1047

android中的全局变量定义与使用

android中的全局变量定义与使用在平时的开发过程中,有时候可能会需要一些全局数据,来让应用中的所有Activity和View都能访问到,大家在遇到这种情况时,可能首先会想到自己定义一个类,然后创建...
  • zchuanzhao
  • zchuanzhao
  • 2015年09月29日 13:32
  • 1306

ListView的子item自定义布局跟数据的填充

listview的数据填充有三种方法,这里我就
  • u010606061
  • u010606061
  • 2014年10月31日 11:37
  • 1026

全局变量初始化相关的一个错误

全局变量初始化相关的一个错误标签(空格分隔):Coding-Nissan 全局变量初始化全局变量 在C++中对于以下语句: // 全局域 int i = 3; int j = i;  因为是全局变量...
  • hust_sheng
  • hust_sheng
  • 2015年11月21日 14:23
  • 581

Android--listView中的button控件获取item的值

在listview中的listitem设置事件响应,如果listitem中有button控件,这时候listitem就不会捕获到点击事件,而默认的是listitem中的button会捕获点击事件,这方...
  • chaoyu168
  • chaoyu168
  • 2017年02月16日 11:49
  • 1753

JNI局部变量和全局变量引用

1.局部变量引用 定义在本地方法内的局部变量,会随着方法调用完return后,局部变量也会随着被释放。 所以,不要在本地方法中定义static变量来存储数据!举个栗子: 像上面这样子是不行滴!...
  • fwt336
  • fwt336
  • 2017年03月08日 11:04
  • 1299

【Android基础】listview控件的使用(1)------最简单的listview的使用

listview控件是项目开发中最常用的空间之一,我将慢慢推出关于listview的一系列的文章,先从最简单的,系统自带的listview开始吧! 先上效果图: activ...
  • bz419927089
  • bz419927089
  • 2014年02月19日 16:58
  • 4732

Android--焦点问题-ListView中item及其子控件无法响应点击事件

ListView中item及其子控件无法响应点击事件原因 存在Button、ImageButton、CheckBox(一般是是Button或者CheckBox及其子类控件)等获取焦点能力比较强的控...
  • u010378579
  • u010378579
  • 2015年10月12日 01:09
  • 2099

Linux中设置全局变量

1、修改/etc/bashrc(推荐) 2、修改/etc/profile(不推荐) #source /etc/bashrc 格式: export LIGPLOT_DIR=/usr/local/...
  • BlueBirdssh
  • BlueBirdssh
  • 2011年01月12日 08:52
  • 4041
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关Android ListView中控件定义成全局变量的错误
举报原因:
原因补充:

(最多只允许输入30个字)