2011-12-05 27 views
68

Tôi muốn đặt Trình nghe trên một hộp kiểm. Tôi nhìn để biết và nó là như thế này:Android: trình nghe hộp kiểm

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ĩ nó là một OnCheckedChangeListener cho một RadioGroup và nó không hoạt động. Làm thế nào tôi có thể sửa lỗi này?

Trả lời

185

Bạn có thể làm điều 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ó: http://stackoverflow.com/questions/18881817/removing-strikethrough-from-textview – Michal

+0

'OnCheckedChangeListener' và' CompoundButton.OnCheckedChangeListener' là khác nhau. – zionpi

4

Thay đổi RadioGroup group với CompoundButton buttonView và sau đó nhấn tổ hợp phím Ctrl + Shift + O để sửa chữa hàng nhập khẩu của bạn.

3

thử này

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

    }); 
6

Hãy thử điều 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 
      } 

}); 

Hope this helps ...

39

bạn cũng có thể đi cho một OnClickListener đơn giản:

satView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if(satView.isChecked()){ 
        System.out.println("Checked"); 
       }else{ 
        System.out.println("Un-Checked"); 
       } 
      } 
     }); 
+0

Nó thực sự chỉ là một giải pháp làm việc khi tôi muốn nghe một hộp kiểm ** hành động nhấp **, chứ không phải ** trạng thái ** của nó giống như các giải pháp khác đề xuất ở đó. – Acuna

16

Bạn nhận được lỗi vì bạn imp orted package.You sai nên import android.widget.CompoundButton.OnCheckedChangeListener;

Vì vậy, khi gọi lại nên là:

 box.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

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

     } 
    }); 
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; 
      } 
     } 
    } 
} 
+0

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

1
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"); 
     } 
    } 
}); 
+0

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ó] (http://stackoverflow.com/posts/39051766/edit) để giải thích nó hoạt động như thế nào. – dorukayhan

Các vấn đề liên quan