Android CheckBox显示错位的解决 && SparseBooleanArray的使用
2015-11-16 11:49
696 查看
在开发中遇到CheckBox的选中/未选中 显示错乱的问题
解决方法:
1. 在Adpater中定义一个CheckBox的状态列表(用SparseBooleanArray取代HashMap<Integer,Boolean>)
2. 在getView()中,给CheckBox添加监听器OnCheckedChangeListener
代码如下:
解决方法:
1. 在Adpater中定义一个CheckBox的状态列表(用SparseBooleanArray取代HashMap<Integer,Boolean>)
2. 在getView()中,给CheckBox添加监听器OnCheckedChangeListener
代码如下:
public class MultiSelectLevelTwoAdapter extends BaseAdapter { /* 填充数据列表 */ private List<Map<String, Object>> list; /* 用来导入布局 */ private LayoutInflater mInflater = null; /* CheckBox状态列表 */ private SparseBooleanArray sbaState; // 构造器 public AcatMultiSelectLevelTwoAdapter(Context context, List<Map<String, Object>> list, LinkedHashSet<String> conditionSet) { this.list = list; mInflater = LayoutInflater.from(context); sbaState = new SparseBooleanArray(); for (int i = 0; i < list.size(); i++) { if (conditionSet.contains(list.get(i).get( CommonConstants.MULTI_SELECT_LIST_KEY_INFO))) { sbaState.put(i, true); } } } @Override public View getView(final int position, View convertView, ViewGroup parent) { MultiSelLvTwoViewHolder holder; if (convertView == null) { // 获得ViewHolder对象 holder = new MultiSelLvTwoViewHolder(); // 导入布局 convertView = mInflater.inflate( R.layout.acat_listitem_multi_select_level_two, null); holder.tvId = (TextView) convertView.findViewById(R.id.tvId); holder.tvInfo = (TextView) convertView.findViewById(R.id.tvInfo); holder.cbItem = (CheckBox) convertView.findViewById(R.id.cbItem); // 设置标签 convertView.setTag(holder); } else { holder = (MultiSelLvTwoViewHolder) convertView.getTag(); } // 设置列表的显示信息 String id = list.get(position).get(CommonConstants.MULTI_SELECT_LIST_KEY_INFO) .toString(); String info = list.get(position).get(CommonConstants.MULTI_SELECT_LIST_KEY_TITLE) .toString(); holder.tvId.setText(id); holder.tvInfo.setText(info); /** * ============================================== * -------点击事件:CB修改时,变更CB状态列表------ * ============================================== */ holder.cbItem.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { sbaState.put(position, isChecked); } else { sbaState.delete(position); } } }); holder.cbItem.setChecked(sbaState.get(position, false)); return convertView; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } }
相关文章推荐
- Android插件化开发基础之Java反射机制研究
- android 下拉菜单Spinner的具体用法
- Android代码混淆之混淆规则
- Android usb 部分Api
- Android利用Soap读取WebService并且解析XML的DataSet数据
- Android各个activity之间(页面之间)的切换实现方式(推荐第一种方式)
- 如何解决Android 5.0中出现的警告:Service Intent must be explicit
- Android基础入门教程——8.4.2 Android动画合集之补间动画
- 初学Android项目:开发电子市场<第四天>
- <android5.0>之View state changes(视图状态改变)
- 做一个下拉刷新必须需要掌握的android知识点
- PSA: Android 6.0 Theme.NoDisplay Regression
- QQ聊天之Android显示Gif ——在TextView中添加动态表情
- android四大组件之BroadcastReceiver短信拦截功能
- 新的起点 -- 开始奔跑 -- 开博篇
- Android图片查看支持双击放大缩小、多点触摸(多机型测试,长期使用很稳定)
- Android获取网页数据的方法总结
- 去除AndroidManifest.xml uses-sdk警告方法
- Android内存中的图片
- Android tips(一)-->Android SDK镜像的介绍使用