Android动态创建CheckBox勾选时仅最新控件弹出Toast问题求解
问题根因
你实现的OnClickListener监听内部一直引用全局的toDoCheckBox变量判断选中状态,这个全局变量每次创建新CheckBox时都会被覆盖为最新实例的引用,所以无论点击哪个旧CheckBox,触发监听时判断的都是最新CheckBox的状态,自然只有最新创建的CheckBox能触发Toast。
修复方案
onClick方法传入的view参数就是当前被点击的控件实例,直接强转为CheckBox使用即可,不需要依赖全局变量。
调整后的监听代码
this.checkBoxListener = new View.OnClickListener(){ @Override public void onClick(View view){ CheckBox currentClickedBox = (CheckBox) view; if(currentClickedBox.isChecked()){ Toast.makeText(MainActivity.this,"You did a good work, keep it up!",Toast.LENGTH_SHORT).show(); } } };
额外优化建议
- 可以删除
onCreate中冗余的toDoCheckBox = new CheckBox(this)和对应的设置监听代码,这部分创建的CheckBox没有被添加到布局中,没有实际作用。 - 原有监听里的
toDoCheckBox.setChecked(true)属于无效代码,用户点击CheckBox本身就会自动切换选中状态,不需要手动重复设置。
内容的提问来源于stack exchange,提问作者mockingbird
相关产品推荐
相关产品推荐

