【问题标题】:Android: checkbox listenerAndroid:复选框监听器
【发布时间】:2011-12-05 14:31:32
【问题描述】:

我想在CheckBox 上放置一个监听器。我找了资料,是这样的:

satView = (CheckBox)findViewById(R.id.sateliteCheckBox);

satView.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        if (isChecked){
            // perform logic
        }
    }

});

问题是 Eclipse 认为它是 OnCheckedChangeListenerRadioGroup 并且它不起作用。我该如何解决这个问题?

【问题讨论】:

    标签: java android android-checkbox


    【解决方案1】:

    你可以这样做:

    satView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    
           @Override
           public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
    
           }
       }
    );     
    

    【讨论】:

    • 谢谢,这里是如何删除它:stackoverflow.com/questions/18881817/…
    • OnCheckedChangeListenerCompoundButton.OnCheckedChangeListener 不同。
    • for kotlin satView.setOnCheckedChangeListener { buttonView, _ -> if (buttonView.isChecked) { // 执行操作 } else { // 执行操作 } }
    【解决方案2】:

    你也可以选择简单的View.OnClickListener:

    satView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(((CompoundButton) view).isChecked()){
                System.out.println("Checked");
            } else {
                System.out.println("Un-Checked");
            }
        }
    });
    

    【讨论】:

    • 当我想听一个复选框单击操作时,这实际上只是一个可行的解决方案,而不是像其他解决方案推荐的那样状态
    • 在recycleView中为复选框设置检查监听器的最佳方式
    【解决方案3】:

    你收到错误是因为你导入了错误的包。你应该import android.widget.CompoundButton.OnCheckedChangeListener;

    所以回调应该是:

            box.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
    
            }
        });
    

    【讨论】:

      【解决方案4】:

      试试这个:

      satView = (CheckBox) findViewById(R.id.sateliteCheckBox);
      
      satView.setOnCheckedChangeListener(new OnCheckedChangeListener() {
          @Override 
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (buttonView.isChecked()) { 
                      // checked
                } 
                else 
                {
                      // not checked
                }
          }
      
      });
      

      希望这会有所帮助。

      【讨论】:

        【解决方案5】:

        将 Chris 接受的答案翻译成 Kotlin:

        val checkBox: CheckBox = findViewById(R.id.chk)
        checkBox.setOnCheckedChangeListener { buttonView, isChecked ->
            // Code here 
        }
        

        【讨论】:

        • 注意:如果不使用buttonView:"{ _, isChecked ->"
        【解决方案6】:

        试试这个

        satView.setOnCheckedChangeListener(new android.widget.CompoundButton.OnCheckedChangeListener.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    if (isChecked){
                        // perform logic
                    }
                }
        
            });
        

        【讨论】:

          【解决方案7】:

          RadioGroup group 更改为CompoundButton buttonView,然后按Ctrl+Shift+O 来修复您的导入。

          【讨论】:

            【解决方案8】:

            您可以使用此代码。

            public class MySampleActivity extends Activity {
                CheckBox cb1, cb2, cb3, cb4;
                LinearLayout l1, l2, l3, l4;
            
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    cb1 = (CheckBox) findViewById(R.id.cb1);
                    cb2 = (CheckBox) findViewById(R.id.cb2);
                    cb3 = (CheckBox) findViewById(R.id.cb3);
                    cb4 = (CheckBox) findViewById(R.id.cb4);
                    l1 = (LinearLayout) findViewById(R.id.l1);
                    l2 = (LinearLayout) findViewById(R.id.l2);
                    l3 = (LinearLayout) findViewById(R.id.l3);
                    l4 = (LinearLayout) findViewById(R.id.l4);
                }
            
                @Override
                protected void onPostCreate(Bundle savedInstanceState) {
                    super.onPostCreate(savedInstanceState);
                    cb1.setOnCheckedChangeListener(new MyCheckedChangeListener(1));
                    cb1.setOnCheckedChangeListener(new MyCheckedChangeListener(2));
                    cb1.setOnCheckedChangeListener(new MyCheckedChangeListener(3));
                    cb1.setOnCheckedChangeListener(new MyCheckedChangeListener(4));
                }
            
                public class MyCheckedChangeListener implements CompoundButton.OnCheckedChangeListener {
                    int position;
            
                    public MyCheckedChangeListener(int position) {
                        this.position = position;
                    }
            
                    private void changeVisibility(LinearLayout layout, boolean isChecked) {
                        if (isChecked) {
                            l1.setVisibility(View.VISIBLE);
                        } else {
                            l1.setVisibility(View.GONE);
                        }
            
                    }
            
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        switch (position) {
                            case 1:
                                changeVisibility(l1, isChecked);
                                break;
                            case 2:
                                changeVisibility(l2, isChecked);
                                break;
                            case 3:
                                changeVisibility(l3, isChecked);
                                break;
                            case 4:
                                changeVisibility(l4, isChecked);
                                break;
                        }
                    }
                }
            }
            

            【讨论】:

            • 为什么你将一个'LinearLayout'传递给你的'changeVisibility(LinearLayout layout, boolean isChecked)'方法却每次只改变一个布局的可见性?
            【解决方案9】:
            h.chk.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View view)
                {
                    CheckBox chk=(CheckBox)view; // important line and code work
                    if(chk.isChecked())
                    {
                        Message.message(a,"Clicked at"+position);
                    }
                    else
                    {
                        Message.message(a,"UnClick");
                    }
                }
            });
            

            【讨论】:

            • 欢迎来到 Stack Overflow!您可以通过editing it 更好地回答这个问题,以解释它是如何工作的。
            【解决方案10】:

            如果您希望通过接口实现在 Kotlin 中执行此操作。

            class MainActivity: AppCompatActivity(),CompoundButton.OnCheckedChangeListener{
            
             override fun onCreate(savedInstanceState: Bundle?) {
                    super.onCreate(savedInstanceState)
                    setContentView(R.layout.activity_main)
            
                  val yourCheckBox = findViewById<CheckBox>(R.id.check_box)
                  yourCheckBox.setOnCheckedChangeListener(this)
            
                }
            
             override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
                    when(buttonView?.id){
                        R.id.check_box -> Log.d("Checked: ","$isChecked")
                    }
                }
            
            }
            

            【讨论】:

              猜你喜欢
              • 2011-11-22
              • 2013-06-14
              • 1970-01-01
              • 1970-01-01
              • 2016-06-17
              • 1970-01-01
              • 1970-01-01
              • 2012-04-13
              • 1970-01-01
              相关资源
              最近更新 更多