3 回答
TA贡献1943条经验 获得超7个赞
你可以使用一个数组和一个 id
public void checkUnCheck(boolean checkBoxValue,int checkBoxId){
if(checkBoxValue) {
for (int i = 0; i <= checkBoxId; i++) {
myCheckBoxs[i].setChecked(true);
}
}else{
myCheckBoxs[checkBoxId].setChecked(false);
}
}
并打电话
checkUnCheck(checkBox0Value,0);
checkUnCheck(checkBox1Value,1);
checkUnCheck(checkBox2Value,2);
TA贡献1842条经验 获得超12个赞
试试这个方法
在所有复选框中提供一个标签,而不是像下面这样的 id
布局文件
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="0"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="1"/>
.
.
.
.
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="25"/>
活动.java
在 Activity 中使用 findViewWithTag 查找所有 CheckBox 视图并在所有设置侦听器并在侦听器事件上处理如下
CheckBox cbox;
cbox = (CheckBox) findViewWithTag("0");
cbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
int loopValue = (int) buttonView.getTag();
for(int i=0;i<loopValue;i++){
CheckBox cb = (CheckBox) findViewWithTag(i);
cb.setChecked(true);
}
}
}
});
TA贡献1809条经验 获得超8个赞
一种解决方案是使用HashMap和它的反向
HashMap<CheckBox,Integer> map = new HashMap();
map.put(checkBox0,0);
map.put(checkBox1,1);
map.put(checkBox2,2);
map.put(checkBox3,3);
map.put(checkBox4,4);
map.put(checkBox5,5);
.
.
.
map.put(checkBox25,25);
Map<String, Character> reverseMap = new HashMap<>();
for(Map.Entry<Character, String> entry : map.entrySet()){
reverseMap.put(entry.getValue(), entry.getKey());
}
public void checkValue(CheckBox checkbox, boolean checkBoxValue)
{
if(checkBoxValue)
{
for(int i=map.get(checkbox); i>=0; i--)
reverseMap.get(i).setChecked(true);
}
else
checkbox.setChecked(false);
}
称呼
checkValue(checkBox20,checkValue);
添加回答
举报