ListView+CheckBox 选中状态错乱问题
来源:互联网 发布:mysql大数据统计报表 编辑:程序博客网 时间:2024/05/18 02:14
最近在开发一个功能,需要选中ListView的item第一次使用这个组合,遇到一个问题 如图:
虽然能返回实际选中的值 但是下面的部分item也会被选中
状态错乱!
代码:
第二个activity
public class Main2Activity extends AppCompatActivity { private ListView listView; private Button btn; private List<Map<String, String>> listdata = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); btn = (Button) findViewById(R.id.btn1); listView = (ListView) findViewById(R.id.listview); initdata(); final ListAdapter adapter = new ListAdapter(this, listdata); listView.setAdapter(adapter); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Info.value = ""; Iterator<Integer> iterator = adapter.isSelected.keySet().iterator(); while (iterator.hasNext()) { Integer next = iterator.next(); Boolean able = adapter.isSelected.get(next); if (able) { Info.value += listdata.get(next).get("value"); } } finish(); } }); } private void initdata() { listdata = new ArrayList<>(); for (int i = 0; i < 50; i++) { Map<String, String> map = new HashMap<>(); map.put("value", "value" + i); listdata.add(map); } }}
adapter
public class ListAdapter extends BaseAdapter implements View.OnClickListener { private Context context; private List<Map<String, String>> listdata ; public HashMap<Integer, Boolean> isSelected; private ViewHolder holder; public ListAdapter(Context context,List<Map<String, String>> listdata){ super(); this.context = context; this.listdata = listdata; init_1(); } private void init_1() { if (isSelected == null) { isSelected = new HashMap<Integer, Boolean>(); for (int i = 0; i < listdata.size(); i++) { isSelected.put(i, false); } } } @Override public int getCount() { return listdata.size(); } @Override public Object getItem(int position) { return listdata.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.list_item, null); holder.name = (TextView) convertView.findViewById(R.id.tv_1); holder.check_state = (CheckBox) convertView.findViewById(R.id.check_state); // 将holder绑定到convertView convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.name.setText(listdata.get(position).get("value")); holder.check_state.setTag(position);// setTag的对象是position,以便下面的onClick使用 holder.check_state.setOnClickListener(this); return convertView; } @Override public void onClick(View v) { Integer tag = (Integer) v.getTag(); if (isSelected.get(tag)) {// 先判断isSelected中是否已经选中 // 选中就置为false,即不选中 isSelected.put(tag, false); } else { // 选中 isSelected.put(tag, true); } notifyDataSetChanged(); } class ViewHolder { private TextView name; private CheckBox check_state; }}
Info.java
public class Info { public static Map<Integer, Boolean> isSelect = null; public static String value = "";}
状态错乱了,既然状态错乱,那就自己创建一个集合保存checkBox的状态 其实集合在上述代码中已经创建了,对 就是isSelected,通过这个集合里面的值来判断checkbox的状态就好了,物尽其用;
holder.check_state.setChecked(isSelected.get(position));
在上面的adapter里面加入这一行代码,完美决绝
推荐大家也看一下这篇博客:错乱的原因解释的很到位,我就不多说了
Android ListView CheckBox状态错乱
0 0
- ListView+CheckBox 选中状态错乱问题
- 关于ListView中checkBox选中状态错乱问题的解决办法
- ListView嵌套CheckBox滑动时CheckBox选中状态错乱
- ListView嵌套CheckBox滑动时CheckBox选中状态错乱
- 关于BaseAdapter,SimpleAdapter的数据显示错乱问题,选中状态错乱问题,Checkbox选中状态错乱问题总结
- ListView+CheckBox错乱问题
- Listview Checkbox错乱问题
- Listview Checkbox错乱问题
- 解决checkbox在ListView中的选中错乱问题
- 解决checkbox在滑动时选中状态错乱的问题
- Android ListView CheckBox状态错乱
- Android ListView CheckBox状态错乱
- Android ListView CheckBox状态错乱
- Android ListView CheckBox状态错乱
- Android ListView CheckBox状态错乱
- Android ListView CheckBox状态错乱
- Android ListView CheckBox状态错乱
- Android ListView CheckBox状态错乱
- OpenGL ES 2.0 Shader相关介绍
- C++ Primer | 第一章 开始
- java多线程实现数据共享
- Alluxio(Tachyon) 集群独立运行模式安装遇到的问题(非root用户)
- LA 3514 The Ministers' Major Mess(2-SAT)
- ListView+CheckBox 选中状态错乱问题
- 4.搜索之路——solr部署到Tomcat
- DataReader只读
- CentOS 7.x安装配置
- 5.搜索之路——solr与lucene和nutch关系
- 设计原则——开放封闭原则(Open Close Principle)
- AS汇编器源码剖析-第3章-指令字符的识别
- 6.搜索之路——solr使用
- ListView添加HeadView后布局紊乱的问题