Android 继承BaseAdapter适配器中的getView方法,导致的ListView条目出现重复解决办法(转载)-阿里云开发者社区

开发者社区> 余二五> 正文

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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
安卓开发_浅谈ListView(ArrayAdapter数组适配器)
列表视图(ListView)以垂直的形式列出需要显示的列表项。   实现过程:新建适配器->添加数据源到适配器->视图加载适配器   在安卓中,有两种方法可以在屏幕中添加列表视图 1、直接用ListView组件创建 2、让Activity继承ListActivity实现   一、xm...
846 0
IntelliJ IDEA常见问题解决办法汇总
IntelliJ IDEA常见问题解决办法汇总
767 0
C# ASP.NET Webservice调用外部exe无效的解决方法
原文:C# ASP.NET Webservice调用外部exe无效的解决方法 最近用asp.net做webservice,其中有个功能是调用执行外部的exe(类似cmd中执行),但执行Process.Start之后就没有结果,同样代码在winform下正常,折腾两天终于找到解决方法 本文参考了以下网页,十分感谢 http://bbs.
1115 0
Android点击EditText文本框之外任何地方隐藏键盘的解决办法
1,实现方法一:通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏   加上id和clickable=true   然后在onCreate里,添加onClick事件的监听: @Overri...
674 0
+关注
20382
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载