为了账号安全,请及时绑定邮箱和手机立即绑定

Java 如何自动选中下面的复选框?

Java 如何自动选中下面的复选框?

胡子哥哥 2021-09-12 20:49:08
我有 25 个复选框。我不想检查层次结构。如果我选中 checkbox2,它应该选中 checkbox2 和 checkbox1。如果我选中 checkbox3,它应该选中 checkbox3,2 和 1....我已经有一个工作代码。但它太渴望 25 个复选框了。我怎样才能使这个代码更小?        if (checkBox0Value) {        checkBox0.setChecked(true);    } else {        checkBox0.setChecked(false);    }    if (checkBox1Value) {        checkBox1.setChecked(true);        checkBox0.setChecked(true);    } else {        checkBox1.setChecked(false);    }    if (checkBox2Value) {        checkBox2.setChecked(true);        checkBox1.setChecked(true);        checkBox0.setChecked(true);      .......................我的 XML 有标签 insinde<TableRow            android:id="@+id/tablelvl0"            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:layout_marginLeft="8dp"            android:layout_marginRight="8dp"            android:gravity="center">            <CheckBox                android:id="@+id/Lcheck0"                android:layout_width="70dp"                android:layout_height="wrap_content"                android:fontFamily="sans-serif-condensed"                android:gravity="center"                android:tag="0"                android:text="0"                android:textColor="@color/colorAccent"                android:textSize="14sp"                android:textStyle="bold" />                ..............
查看完整描述

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);


查看完整回答
反对 回复 2021-09-12
?
红颜莎娜

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);

                            }

                        }

                    }

                });


查看完整回答
反对 回复 2021-09-12
?
海绵宝宝撒

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);


查看完整回答
反对 回复 2021-09-12
  • 3 回答
  • 0 关注
  • 259 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信