Android: trình nghe hộp kiểm


110

Tôi muốn đặt một Listener trên a CheckBox. Tôi đã tìm kiếm thông tin và nó giống như thế này:

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

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

});

Vấn đề là Eclipse nghĩ rằng nó là một OnCheckedChangeListenercho a RadioGroupvà nó không hoạt động. Làm thế nào tôi có thể sửa lỗi này?

Câu trả lời:


268

Bạn có thể làm được việc này:

satView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

       @Override
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {

       }
   }
);     

1
Cảm ơn bạn và đây là làm thế nào để loại bỏ nó: stackoverflow.com/questions/18881817/...
Michal

OnCheckedChangeListenerCompoundButton.OnCheckedChangeListenerkhác nhau.
zionpi

for kotlin satView.setOnCheckedChangeListener {buttonView, _ -> if (buttonView.isChecked) {// thực hiện hành động} else {// thực hiện hành động}}
Aminul Haque Aome

48

bạn cũng có thể đơn giản 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");
        }
    }
});

1
Nó thực sự chỉ là một giải pháp hoạt động khi tôi muốn nghe hành động nhấp vào hộp kiểm , không phải trạng thái của nó như những giải pháp khác khuyến nghị ở đó.
Acuna

19

Bạn gặp lỗi vì bạn đã nhập sai gói. Bạn nên import android.widget.CompoundButton.OnCheckedChangeListener;

Vì vậy, lệnh gọi lại phải là:

        box.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub

        }
    });

11

Thử cái này:

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
          }
    }

});

Hi vọng điêu nay co ich.


4

thử cái này

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

    });

4

Thay đổi RadioGroup groupbằng CompoundButton buttonViewvà sau đó nhấn Ctrl + Shift + O để sửa lỗi nhập của bạn.


4

Bạn có thể sử dụng mã này.

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

Tại sao bạn chuyển một phương thức 'LinearLayout' sang phương thức 'changeVisibility (LinearLayout layout, boolean isChecked)' nhưng bạn chỉ thay đổi khả năng hiển thị của một bố cục mỗi lần?
Bradley Wilson

4

Bản dịch câu trả lời được chấp nhận bởi Chris sang Kotlin:

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

1
Lưu ý: Nếu buttonView không được sử dụng: "{_, isChecked ->"
Elletlar

2
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");
        }
    }
});

1
Chào mừng bạn đến với Stack Overflow! Bạn có thể làm cho câu trả lời này tốt hơn bằng cách chỉnh sửa nó để giải thích cách nó hoạt động.
user8397947

1

Nếu bạn đang tìm cách thực hiện việc này trong Kotlin với phần triển khai giao diện.

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")
        }
    }

}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.