问题描述
我的gridview配置如下:<GridViewandroid:id="@+id/gridApps"android:paddingLeft="20.0dip"android:paddingTop="10.0dip"android:paddingRight="20.0dip"android:paddingBottom="10.0dip"android:layout_width="fill_parent"android:layout_height="fill_parent"android:horizontalSpacing="20.0dip"android:verticalSpacing="25dip"android:numColumns="auto_fit"android:layout_weight="1.0"android:alwaysDrawnWithCache="false"></GridView>android端,引用的adapter中的getview方法的代码如下:@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHorder horder; TestClass.println("position",String.valueOf(position)); //主要看这里,等下的打印信息可以看到 if (convertView == null) { horder = new ViewHorder(); convertView = LayoutInflater.from(context) .inflate(R.layout.application_layout, null); horder.app_icon = (ImageView) convertView.findViewById(R.id.app_icon); horder.app_title = (TextView)convertView.findViewById(R.id.app_title); convertView.setTag(horder); }else{ horder = (ViewHorder)convertView.getTag(); } ResolveInfo res = resInfo.get(position); horder.app_icon .setImageDrawable(res.loadIcon(packageManager)); horder.app_title .setText(res.loadLabel(packageManager).toString()); return convertView; } logcat打印代码如下:05-09 02:33:00.978: INFO/zkli(8504): =====position====0====05-09 02:33:01.013: INFO/zkli(8504): =====position====0====05-09 02:33:01.023: INFO/zkli(8504): =====position====0====05-09 02:33:01.033: INFO/zkli(8504): =====position====1====05-09 02:33:01.043: INFO/zkli(8504): =====position====2====05-09 02:33:01.053: INFO/zkli(8504): =====position====3====05-09 02:33:01.063: INFO/zkli(8504): =====position====4====05-09 02:33:01.073: INFO/zkli(8504): =====position====5====05-09 02:33:01.083: INFO/zkli(8504): =====position====6====05-09 02:33:01.093: INFO/zkli(8504): =====position====7====05-09 02:33:01.103: INFO/zkli(8504): =====position====8====05-09 02:33:01.113: INFO/zkli(8504): =====position====9====05-09 02:33:01.123: INFO/zkli(8504): =====position====10====05-09 02:33:01.128: INFO/zkli(8504): =====position====11====05-09 02:33:01.138: INFO/zkli(8504): =====position====12====05-09 02:33:01.163: INFO/zkli(8504): =====position====13====05-09 02:33:01.178: INFO/zkli(8504): =====position====14====05-09 02:33:01.193: INFO/zkli(8504): =====position====15====05-09 02:33:01.203: INFO/zkli(8504): =====position====16====05-09 02:33:01.213: INFO/zkli(8504): =====position====17====05-09 02:33:01.223: INFO/zkli(8504): =====position====18====05-09 02:33:01.228: INFO/zkli(8504): =====position====19====05-09 02:33:01.238: INFO/zkli(8504): =====position====20====05-09 02:33:01.248: INFO/zkli(8504): =====position====21====05-09 02:33:01.253: INFO/zkli(8504): =====position====22====05-09 02:33:01.268: INFO/zkli(8504): =====position====23====05-09 02:33:01.273: INFO/zkli(8504): =====position====24====05-09 02:33:01.283: INFO/zkli(8504): =====position====25====05-09 02:33:01.293: INFO/zkli(8504): =====position====26====05-09 02:33:01.303: INFO/zkli(8504): =====position====27====为什么第一次进入列表的时候会打印3此值为0,就是说运行了3次值为0 ,对结果会造成什么影响
解决方案
这是正常的,这是一种延迟加载优化技术getView()方法会根据屏幕可能显示的item数目进行调用,如果你有30个item,那么GridView在第一次加载的时候会创建15个item,每当你滚动GridView的时候,会触发getview去创建将要滚动到的item,而刚才生成的一些item会滚动到不见的区域就会被释放掉,也就是说getView()方法调用次数是不确定的。
解决方案二:
会不会父view初始化时也调用了这个方法,我猜的。