GridView重复调用getView有关问题

使用GridView控件,却发现getView被重复调用,次数多达上百次,拖垮了系统,影响用户体验!

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

		Log.v(Tag, "<getView> position = " + position);

		...
		return convertView;
	}

log信息:

10-12 10:43:09.880: V/GridViewAdapter(30785): <getView> position = 0
10-12 10:43:09.890: V/GridViewAdapter(30785): <getView> position = 0
10-12 10:43:09.890: V/GridViewAdapter(30785): <getView> position = 0
10-12 10:43:09.900: V/GridViewAdapter(30785): <getView> position = 0
10-12 10:43:09.910: V/GridViewAdapter(30785): <getView> position = 0

其中只有以下五条信息是正常的,其它都是多余。

10-12 10:43:10.160: V/GridViewAdapter(30785): <getView> position = 0
10-12 10:43:10.160: V/GridViewAdapter(30785): <getView> position = 1
10-12 10:43:10.170: V/GridViewAdapter(30785): <getView> position = 2
10-12 10:43:10.200: V/GridViewAdapter(30785): <getView> position = 3
10-12 10:43:10.220: V/GridViewAdapter(30785): <getView> position = 4

参考了网上很多的修改的方法,比如布局中高度属性wrap_content设为固定值或者fill_parent等,但都未起作用。也许遇到问题太特殊,只能自己想办法了!     

虽然没有办法阻止系统重复调用getView,但是我们有办法让多余的getView什么都不做。如此这般就可以减轻系统负担,增加用户体验。 

增加一个变量mCount来记录position = 0的次数,依据mCount的值来决定执行流程。

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

		Log.v(Tag, "<getView> position = " + position + " mCount = " + mCount);

		if (position == 0)
		{
			mCount++;
		}
		else
		{
			mCount = 0;
		}

		if (mCount > 1)
		{
			Log.v(Tag, "<getView> drop !!!");
			return convertView;
		}

		...
		return convertView;
	}

log信息

10-12 12:57:32.436: V/GridViewAdapter(32222): <getView> position = 0 mCount = 0
10-12 12:57:32.436: V/GridViewAdapter(32222): <getView> position = 0 mCount = 1
10-12 12:57:32.436: V/GridViewAdapter(32222): <getView> drop !!!
10-12 12:57:32.446: V/GridViewAdapter(32222): <getView> position = 0 mCount = 2
10-12 12:57:32.456: V/GridViewAdapter(32222): <getView> drop !!!
10-12 12:57:32.456: V/GridViewAdapter(32222): <getView> position = 0 mCount = 3
10-12 12:57:32.456: V/GridViewAdapter(32222): <getView> drop !!!
10-12 12:57:32.466: V/GridViewAdapter(32222): <getView> position = 0 mCount = 4
10-12 12:57:32.466: V/GridViewAdapter(32222): <getView> drop !!!
时间: 2024-09-15 00:05:31

GridView重复调用getView有关问题的相关文章

为何ListView中getView被重复调用

我用ListView显示数据时,自定义了一个适配器(extends ArrayAdapter),然后重写了getView方法 ,现在出现一个问题,就是这个getView()方法被重复调用了,比如我的_data中有两条数据,但是 log.i("show",house.toString());这句却被执行了4次甚至更多,请问各位这是神马情况? 方法代码如下: 这是自定义的适配器: package com.hb.puppet.utils; import java.util.List; imp

【Android】ListView中getView的原理与解决多轮重复调用的方法

ListView中getView的工作原理: [1]ListView asks adapter "give me a view" (getView) for each item of the list.(通过getView来获取每个item) [2]A new View is returned and displayed(获取到后返回显示) 那么如果我们有大量的数据需要显示的时候,每个Item都去重复执行getView中的创建新的View的动作吗?这样做会耗费大量的资源去执行重复的事情

关于ListView中getView被重复调用的问题

我用ListView显示数据时,自定义了一个适配器(extends ArrayAdapter),然后重写了getView方法,现在出现一个问题,就是这个getView()方法被重复调用了,比如我的_data中有两条数据,但是log.i("show",house.toString());这句却被执行了4次甚至更多,请问各位这是神马情况? 方法代码如下: 这是自定义的适配器: package com.hb.puppet.utils; import java.util.List; impor

android 多次调用getview的position=0

做项目的碰到这么一个问题:自己定义的GridView的adapter在刷新数据,即调用getView方法时,除了调用正常次数(图中第2条到第8条)的getView,还会多调用1次getView方法(图中的第1条). 原因在于GridView的item的layout中android:layout_height定义为wrap_content , 绘制item高度时系统并不知道item应该绘制多高,它会先取一条来试探以确定item绘制的具体高度,这样就导致多调用了一次getView方法.在滑动.长按等

android listview 连续调用 getview调用getivew方法多次解决办法

此问题的讨论: http://bbs.csdn.net/topics/370257541 当我们在使用listview的时候.有时候自定义adapter的时候,是不是会发现在getview里打印日志的时候,重复调用很多次?有时候4次.有的严重甚至到10次,当我们在listview中移动的时候.每移动一列都会调用很多次,这样大大影响到效率!其实这和listview本身在android上的机制有关.下面我开始来介绍一下吧:       在布局,我们只有一个listview的时候.那好.我们把高设置成

sqlite3-请教Android SQLite大神,我重复调用CREATE TABLE会将旧表覆盖吗?

问题描述 请教Android SQLite大神,我重复调用CREATE TABLE会将旧表覆盖吗? 我实现了一个DBHelper对象,在OnCreate()初始化的时候会这样处理. @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table download_info(_id integer PRIMARY KEY AUTOINCREMENT, thread_id integer)"); }

activity-当旋转移动设备时,onCreate方法被重复调用

问题描述 当旋转移动设备时,onCreate方法被重复调用 在Main Activity 里的 onCreate() 方法中调用一个 AsyncTask.在同一个 Activity 中,如果方向改变后,AsyncTask 被再次调用.如何调整程序来阻止 AsyncTask 被再次调用呢? public class Main extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.on

javascript-这段js会不会重复调用toString()导致死循环

问题描述 这段js会不会重复调用toString()导致死循环 function A(){};A.prototype.toString = function() { return this;};var a = new A;alert(a);

aspx-关于asp.net的小问题,GridView总是调用不出来英文,只显示连接。

问题描述 关于asp.net的小问题,GridView总是调用不出来英文,只显示连接. <div class ="info"> <asp:GridView ID="GridView1" Runat="server" align="center" AutoGenerateColumns="False" BorderStyle="None" DataKeyField=&qu