Android Studio以编程方式检查复选框并调用其OnCheckedChange

时间:2017-02-20 13:46:33

标签: android checkbox

一旦选中或取消选中,我是否可以通过编程方式检查checkbox并将其调用编码为的任何内容?

例如,如果我有一个像这样的复选框

    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked) {
                Toast.makeText(getContext(), "You checked the checkbox!", Toast.LENGTH_SHORT).show();
            }
            else {
                Toast.makeText(getContext(), "You unchecked the checkbox!", Toast.LENGTH_SHORT).show();
            }
        }
    });

然后会打电话给

checkBox.setChecked(true);

我的复选框会显示已选中,但它不会进行祝酒。

5 个答案:

答案 0 :(得分:1)

顾名思义setOnCheckedChangeListener,如果复选框值实际发生变化,它只会调用您的回调。

因此,如果已经检查过(true),然后调用checkbox.setChecked(true),则该值未更改,因此不会调用您的回调。

尝试checkbox.setChecked(false),它应该正常工作。

这是我最好的猜测,没有看到你的其余代码/ xml。

答案 1 :(得分:1)

您可以执行以下任何操作
 1.单独创建侦听器对象,并在调用setChecked时手动调用它
 2.提取实施onCheckedChanged的方法,并在更改时手动调用。

答案 2 :(得分:1)

Android小工具'点击或触摸事件不会被模拟。您可以通过编程方式更改窗口小部件的状态,例如禁用,启用,选中或取消选中,但在状态更改时执行任何任务,您必须通过触摸该窗口小部件手动更改其状态。

答案 3 :(得分:0)

   checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if (isChecked) {

                             Toast.makeText(getContext(), "You checked the checkbox!", Toast.LENGTH_SHORT).show();

                }

            } else {

                                Toast.makeText(getContext(), "You unchecked the checkbox!", Toast.LENGTH_SHORT).show();

            }


        }

    });

Just Cheked it。它对我有用。

答案 4 :(得分:0)

如果您在LinearLayout中添加复选框(我们将其称为checkLayout),如下所示:

val widget = AppCompatCheckBox(checkLayout.context)
    val params = LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT
    )
    widget.tag = "something you can specify later"
    checkLayout.addView(widget)

获取所选复选框的代码如下:

checkLayout.children.forEach { cb ->
 if(cb is AppCompatCheckBox && cb.isChecked){
    // here you have your checkbox and by tag maybe you can do whatever you want
  }
}

对于动态添加的RadioButton,您可以将它们添加到RadioGroup中(我们将其称为radioLayout)并像这样获得所选内容:

val rb: AppCompatRadioButton? = radioLayout.findViewById(radioLayout.checkedRadioButtonId)
if(rb.tag == "something"){
  //your code here
}