android 多次调用getview的position=0
16lz
2021-01-24
scrollview里面嵌套gridview,gridview的高度未知。
适配器会出现 getview()的position==0多调用一次。
如上的bug。
原因在于:在于GridView的item的layout中android:layout_height定义为wrap_content , 绘制item高度时系统并不知道item应该绘制多高,它会先取一条来试探以确定item绘制的具体高度,这样就导致多调用了一次getView方法。在滑动、长按等GridView需要重绘的情况下,getView的调用次数可能会不止多一次。多调用的==0那一次会把最后一个item的view传递进来,而这个时候position==0,所以就会看到最好一个和第一个一样的图片。
解决:添加下面红色,忽略临时那一条。
@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if(null == convertView){ImageView img = new ImageView(getActivity());AbsListView.LayoutParams lp = new AbsListView.LayoutParams(93, 93);img.setLayoutParams(lp);img.setScaleType(ScaleType.CENTER_CROP);convertView = img;}/** * 解决bug:多次调用position==0问题,导致 +图标 显示为第一个图标。 * 原因:原因在于GridView的item的layout中android:layout_height定义为wrap_content * , 绘制item高度时系统并不知 道item应该绘制多高,它会先取一条来试探以确定item绘制的具体高度,这样就导致多 * 调用了一次getView方法。在滑动、长按等GridView需要重绘的情况下,getView的调用次数可能会不止多一次。 */if(position != parent.getChildCount()){return convertView;}c_bean_choose_pic data = mArrayListChoosePic.get(position);ImageView img = (ImageView)convertView;if(data.mEnumType == c_bean_choose_pic.enum_pic.pic){mImageLoader.displayImage("file:///"+data.mPicLocalPath, img,options);}else{img.setBackground(null);img.setImageResource(data.res_add_id);}return convertView;}
修改后的效果:
更多相关文章
- 【android】图片放错文件夹引起显示大小不同的原因与屏幕适配原
- Android(安卓)MediaRecorder视频录制,多分辨率调节
- 关于android:background="@drawable/ 出错
- 最近reactNative在开发android中遇到的坑
- Android人脸识别app——基于Face++,MVP+Retofit+RxJava+Dagger高
- 2013.04.10——— android listview getview 多次调用的问题
- system 权限程序不能访问sd卡问题
- Android-沉浸式布局的玩法
- android中ImageView属性及其详解