关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;
}



相关文章推荐

ButterKnife 点击事件没反应的解决方案

Butterknife8.0在使用的时候,有个小小的问题,不知道是设计如此还是确实存在这样的一个bug。请看我的代码:          这两个类的关系是:CloseConnectActivity是B...

ListView无法执行getView()的几种可能问题

在遇到这个问题过后,在网上翻阅了一些资料,找到了一些思路,一下问题的解释来自一位大神,觉得非常有用,就收藏记录下来。  listview是一个比较常用的控件,为了适应自己需要的效果往往会继承b...
  • zqsong5
  • zqsong5
  • 2017年04月11日 17:25
  • 193

Android ListView滑动过程中控件显示重复/错误问题之原理分析及解决方案

分析并解决①控件数据未初始化而导致的显示错误②网络异步加载导致出现显示错误、重复。...

Android ListView滑动过程中控件显示重复/错误问题之原理分析...

Android ListView滑动过程中控件显示重复/错误问题之原理分析及解决方案 前言: 为了使ListView性能更优,最普遍的方法就是添加一个ViewHolder静态类。 虽然性能有很大...

Android开发调试-static静态变量与如何定义全局变量的问题

static修饰的静态变量,使用很方便,在不同的类和包中都可以使用,在虚拟机中单独占用内存,没错,这些都是它们的优点,不过在项目上线后,才发现static有一些不太好的地方。 在查看项目的崩溃信息时...

Android项目全局变量的定义简介

[摘要]尽量使用继承自Application的自定义类,在我们继承的类中定义需要全局使用的变量,并通过getApplicationContext()来获取和保存相关的变量即可,本文介绍Android项...
  • MYBOYER
  • MYBOYER
  • 2013年04月22日 21:54
  • 688

Android项目全局变量的定义

static修饰的静态变量,使用很方便,在不同的类和包中都可以使用,在虚拟机中单独占用内存,没错,这些都是它们的优点,不过在项目上线后,才发现static有一些不太好的地方。在查看项目的崩溃信息时,发...
  • QS219
  • QS219
  • 2014年03月07日 17:19
  • 795

Android之项目全局变量的定义

static修饰的静态变量,使用很方便,在不同的类和包中都可以使用,在虚拟机中单独占用内存,没错,这些都是它们的优点,不过在项目上线后,才发现static有一些不太好的地方。         在查看...

android ListView显示多个类型item 和 item中控件抢夺焦点解决办法

在android  ListView item条目中 如果添加有ImageView,Button 等会强行获取获取焦点 导致 ListView 本身的监听失效 下面是总结的几个方法 来进行避免此类问题...

Android listView中点击item或Item中控件跳转对应的详情页面的实现(商品详情查看)

应用场景开发中,特别是电商客户端,用ListView展示商品列表,点击Item 或是Item中的控件会跳转到对应的商品详情,本文主要讲Intent传递数据,实现简单的商品详情展示,实际的开发中是采用传...
  • tsaopin
  • tsaopin
  • 2015年08月21日 01:04
  • 6771
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关Android ListView中控件定义成全局变量的错误
举报原因:
原因补充:

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