Listveiw加checkbox
来源:互联网 发布:java config 配置文件 编辑:程序博客网 时间:2024/06/04 18:12
GitHub博客:http://lioil.win/2016/04/20/ListView-CheckBox.html
Coding博客:http://c.lioil.win/2016/04/20/ListView-CheckBox.html
适配器在getview()中重复使用【被移除屏幕的item】
会造成被选中的checkbox重新出现,显示异常
故需要记录checkbox的状态
<!--CheckBox抢占Item焦点,导致Item点击无效。 方法一:CheckBox设置android:clickable="false" 方法二:Item根布局设置android:descendantFocusability="blocksDescendants"--> <LinearLayout ······· android:descendantFocusability="blocksDescendants" ·······> <CheckBox ······· android:clickable="false" ·······/> </LinearLayout>
public class MyAdapter extends BaseAdapter { public MyAdapter(···,HashMap<Integer, Boolean> isSelected){ ······ } @Override public View getView(int position, View convertView, ViewGroup arg2) { if (convertView == null) { ViewHolder holder = new ViewHolder(); convertView = inflater.inflate(R.layout.listview, null); holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // 显示checkbox的状态 holder.cb.setChecked(isSelected.get(position)); return view; } }
public class MainActivity extends Activity { ······ // 记录checkbox状态 private HashMap<Integer, Boolean> isSelected ······ // 初始化所有checkbox为未选择 isSelected = new HashMap<Integer, Boolean>(); for (int i = 0; i < list.size(); i++) { isSelected.put(i, false); } ······ // 设置带checkbox的listview listview.setAdapter(new MyAdapter(·····, isSelected)); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) { // 获取checkbox控件 ViewHolder holder = (ViewHolder) view.getTag(); // 点击item切换checkbox状态 holder.cb.toggle(); // 记录checkbox状态 isSelected.put(position, holder.cb.isChecked()); } }); //全选 xxx.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { for(int i=0;i<list.size();i++){ isSelected.put(i,true); } // 通知适配器checkbox状态改变 adapter.notifyDataSetChanged(); } }); //反选 xxx.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { for(int i=0;i<list.size();i++){ if(isSelected.get(i)==false){ isSelected.put(i, true); } else{ isSelected.put(i, false); } } adapter.notifyDataSetChanged(); } }); //取消已选 xxx.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { for(int i=0;i<list.size();i++){ if(isSelected.get(i)==true){ isSelected.put(i, false); } } adapter.notifyDataSetChanged(); } });}
0 0
- Listveiw加checkbox
- ListVeiw
- 给树加checkbox
- DataGrid 加checkbox
- RecyclerView加CheckBox
- UltraWinGrid 表头加checkbox,加全选功能
- DataGrid加 CheckBox在线等待
- GridView表头加CheckBox按钮
- 禁止ListVeiw滑动
- ListVeiw性能优化
- 双ListVeiw滚动
- ListVeiw上拉
- WinForm中给GridView加checkbox
- WinForm中给GridView加checkbox
- ListView 加checkBox实现 单选功能
- Flex tree加三状态的Checkbox
- ListView加CheckBox简单实现批量删除
- [Java] JTable 表头加checkbox全选
- 1217
- POJ 1466 Girls and Boys 已翻译
- 【Charles】Breakpoint 断点
- Java语言基础(二)—— 标识符
- Java 正则表达式
- Listveiw加checkbox
- 引用计数法
- Spring boot log4j
- javascript中foreach的用法
- lua 学习笔记
- 简单版杨辉三角
- 挖掘微信Web版通信的全过程
- Head First 学习(1):导入模块并使用
- HTML5学习