Android 继承BaseAdapter适配器中的getView方法,导致的ListView条目出现重复解决办法(转载)

简介:

出现该问题原因为在设置每个条目的值的时候,将设定值的代码放在了判断语句里面,导致有些条目会重复。

对list不清楚导致的错误,特标记之。

错误代码如下,设置应用名称下面的几行值,实践证明,他们的赋值需要在判断条件以外:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public  View getView( int  position, View convertView, ViewGroup parent) { // TODO Auto-generated method stubLog.i(TAG, "getView position = " + position);
 
         ViewHolder viewHolder =  new  ViewHolder(); if  (convertView ==  null ) {
             convertView = mInflater.inflate(R.layout.apps_list_item,  null );
             viewHolder.cb_installed = (CheckBox) convertView
                     .findViewById(R.id.cb_checkedApp);
             viewHolder.iv_appIcon = (ImageView) convertView
                     .findViewById(R.id.iv_app_icon);
             viewHolder.tv_appName = (TextView) convertView
                     .findViewById(R.id.tv_app_name);
             // 设置应用名称
             String mAppName = mData.get(position);
             Log.i( "new" "position "  + position +  " mAppName = "  + mAppName);
             viewHolder.iv_appIcon.setImageResource(R.drawable.ic_launcher);
             viewHolder.tv_appName.setText(mAppName);
             viewHolder.cb_installed.setChecked(isSelected.get(position));
             convertView.setTag(viewHolder);
         } else {
             viewHolder = (ViewHolder)convertView.getTag();
         } return  convertView;        
     }

将这些赋值放在外面,修改后如下,正常了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public  View getView( int  position, View convertView, ViewGroup parent) { // TODO Auto-generated method stubLog.i(TAG, "getView position = " + position);
 
         ViewHolder viewHolder =  new  ViewHolder(); if  (convertView ==  null ) {
             convertView = mInflater.inflate(R.layout.apps_list_item,  null );
             viewHolder.cb_installed = (CheckBox) convertView
                     .findViewById(R.id.cb_checkedApp);
             viewHolder.iv_appIcon = (ImageView) convertView
                     .findViewById(R.id.iv_app_icon);
             viewHolder.tv_appName = (TextView) convertView
                     .findViewById(R.id.tv_app_name);
             convertView.setTag(viewHolder);
         } else {
             viewHolder = (ViewHolder)convertView.getTag();
         }        
         // 设置应用名称
         String mAppName = mData.get(position);
         Log.i( "new" "position "  + position +  " mAppName = "  + mAppName);
         viewHolder.iv_appIcon.setImageResource(R.drawable.ic_launcher);
         viewHolder.tv_appName.setText(mAppName);
         viewHolder.cb_installed.setChecked(isSelected.get(position));
         return  convertView;        
     }









本文转自 我不会抽烟 51CTO博客,原文链接:http://blog.51cto.com/zhouhongyu1989/1417823,如需转载请自行联系原作者

目录
相关文章
|
4月前
|
数据库 Android开发
Android使用EditText+Listview实现搜索效果(使用room模糊查询)
本文介绍如何在Android中使用EditText与ListView实现搜索功能,并结合Room数据库完成模糊查询。主要内容包括:Room的模糊查询语句(使用`||`代替`+`号)、布局美化(如去除ListView分割线和EditText下划线)、EditText回车事件监听,以及查询逻辑代码示例。此外,还提供了相关扩展文章链接,帮助读者深入了解ListView优化、动态搜索及Room基础操作。
312 65
|
Android开发
Android中SurfaceView的双缓冲机制和普通View叠加问题解决办法
本文介绍了 Android 平台上的 SurfaceView,这是一种高效的图形渲染控件,尤其适用于视频播放、游戏和图形动画等场景。文章详细解释了其双缓冲机制,该机制通过前后缓冲区交换来减少图像闪烁,提升视觉体验。然而,SurfaceView 与普通 View 叠加时可能存在 Z-Order 不一致、同步问题及混合渲染难题。文中提供了使用 TextureView、调整 Z-Order 和创建自定义组合控件等多种解决方案。
486 9
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
194 2
|
Android开发
Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法
Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法
5425 2
|
Android开发 Windows
android studio开发时提示 TLS 握手错误解决办法
在Windows环境下遇到TLS协议版本不支持的错误,Gradle构建失败。解决方案是在build.gradle.kts中设置系统属性`https.protocols`为`TLSv1.2`,而非遵循误导信息设置为TLSv1.1。
1282 2
|
前端开发 API Android开发
25. 【Android教程】列表控件 ListView
25. 【Android教程】列表控件 ListView
536 2
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
135 2
|
2月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
145 11