【问题标题】:Android Studio programmatically check a Checkbox and call its OnCheckedChangeAndroid Studio 以编程方式检查复选框并调用其 OnCheckedChange
【发布时间】:2022-01-24 16:31:12
【问题描述】:

我能否以编程方式检查 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);

我的复选框会显示为已选中,但不会成功。

【问题讨论】:

    标签: android checkbox


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      所以如果它已经被检查(true),然后你调用checkbox.setChecked(true),值没有改变,所以你的回调不会被调用。

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

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

      【讨论】:

      • 我的意思是如果它未选中,我调用 setChecked(true),它不会调用 onCheckedChange 方法。但我想这就是它根据以下 cmets 的工作原理,不过谢谢
      【解决方案3】:

      不模拟 Android 小部件的点击或触摸事件。您可以以编程方式更改小部件的状态,例如禁用、启用、选中或取消选中,但是当状态更改时要执行任何任务,您必须通过触摸该小部件手动更改它们的状态。

      【讨论】:

        【解决方案4】:
           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();
        
                    }
        
        
                }
        
            });
        

        刚刚查了一下。它对我有用。

        【讨论】:

        • 您是通过 setChecked 还是通过单击复选框调用它?
        • 通过点击复选框
        • 如果它不起作用,您也可以尝试 checkbox.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {});
        • 当我点击复选框时它会起作用,但如果我以编程方式将其设置为选中或取消选中则不会
        • 不,它以编程方式在一个 PercentRelativeLayout 中膨胀,它位于另一个 PercentRelativeLayout 中,它位于 ScrollView 内。不过这应该不会影响功能。
        【解决方案5】:

        如果你像这样在 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
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-12
          • 2021-06-07
          • 2012-10-01
          • 1970-01-01
          • 2019-07-16
          • 2012-08-13
          • 2020-02-14
          • 1970-01-01
          相关资源
          最近更新 更多