AndroidのListView包含CheckBox时滑动丢失选中状态的解决
2015-06-09 10:41
633 查看
AndroidのListView包含CheckBox时滑动丢失选中状态的解决
listview 中,如果有10项,其中手机屏幕显示1-6项,其余的7-10项在屏幕中不可见,得向下滚动后才能看到,这个时候,如果选中1、2项,再滚动到7-10项,之后再滚动回来1-6项,就发现1、2项并未被选中。解决方法: 编写自定义的Adapter,一下是代码部分。、
class ListviewAdapter extends BaseAdapter { private ArrayList<Appinfo> lists; private ViewHolder viewHolder; private HashMap<Integer, Boolean> map; public ListviewAdapter(ArrayList<Appinfo> list) { lists = list; map = new HashMap<Integer, Boolean>(); for (int i = 0; i < lists.size(); i++) { map.put(i, false); } } @Override public int getCount() { return lists.size(); } @Override public Object getItem(int arg0) { return null; } @Override public long getItemId(int arg0) { return 0; } @SuppressLint("NewApi") @Override public View getView(final int position, View convertView, ViewGroup arg2) { final Appinfo appUnit = lists.get(position); if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(SettingAppActivity.this) .inflate(R.layout.news_list_item, null); viewHolder.item_new = (TextView) convertView .findViewById(R.id.appName); viewHolder.item_pic = (ImageView) convertView .findViewById(R.id.icon); viewHolder.item_check = (CheckBox) convertView .findViewById(R.id.appcheck); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.item_new.setText(appUnit.getAppName()); viewHolder.item_pic.setBackground(appUnit.getAppIcon()); viewHolder.item_check .setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton arg0, boolean checked) { Toast.makeText(SettingAppActivity.this, "checked=" + checked, 1000).show(); if (checked) { map.put(position, true); } else { map.put(position, false); } } }); viewHolder.item_check.setChecked(map.get(position)); return convertView; } } public class ViewHolder { public ImageView item_pic; public TextView item_new; public CheckBox item_check; }
正确的先存后取 之前错误的先取后存了
是因为index错误造成的,那么只要保证index值与当前positon保持一至即可,只要把添加监听器的方法加到初始化view中checkBox状态的代码之前即可.这样即始由于初始化造成调用了onCheckedChange()方法,也因为其中index值是最新的,不会错乱.
相关文章推荐
- Android NDK (学习笔记五) —— java层和native层进行字符串的交互处理
- Android 利用sharepreference保存应用程序状态
- Android Design Support Library使用详解
- java.lang.ClassCastException: 。。。$LayoutParams cannot be cast to android.widget.LinearLayout$Layout
- Android调用系统相机拍照并获取图片
- android中Parcelable接口的使用
- Android 调用QQ登录
- android 自定义view 圆形进度条
- android开发环境安装与配置
- 如何获取Android唯一标识(唯一序列号)
- Android studio导入项目(出现的问题)
- Android安卓中循环录像并检测内存卡容量
- Android编译系统参考手册
- Android Studio 快捷键(MAC)
- Android实战简易教程-第十二枪(ViewFlipper实现幻灯效果)
- Android中3种全屏方法及3种去掉标题栏的方法
- Android图片的固定大小展示
- Android短信发送和接收流程源码分析
- 【转】Universal-Image-Loader(android图片缓存)
- Android布局文件layout.xml的一些属性值