2012-04-12 28 views
7

Tôi đang cố gắng áp dụng một số loại xác thực trên một nhóm hộp kiểm (ví dụ: hai mục mâu thuẫn nhau không thể được kiểm tra cùng nhau) vì vậy tôi muốn bằng cách nào đó nhóm các đối tượng Hộp kiểm tra và áp dụng một cái gì đó như RequiredFieldValidator trên toàn bộ nhóm một lần và trong trình duyệt tính hợp lệ đó, tôi sẽ đăng ký người nghe và thực hiện kiểm tra toàn bộ đối tượng Check Boxes của tôi.Android Check box Nhóm

Những gì tôi tưởng tượng sẽ là một mã mà trông giống như rằng:

CheckBoxView allMyCheckBoxes = new CheckBoxView(checkbox1,checkbox2,checkbox3); //varargs 
validate(allMyCheckBoxes); 

Validate sẽ chứa logic của hộp kiểm mâu thuẫn và tất cả mọi thứ.

Điều đó đã được triển khai ở đâu đó trong Android chưa? Nếu không, ai đã thử một cái gì đó như thế? (Hy vọng chia sẻ nó với chúng tôi ở đây)

Trả lời

1

Bạn có thể sử dụng Nút radio và thiết lập các nhóm khác nhau của chúng.

This documentationThis tutorial sẽ giúp bạn nếu bạn thấy rằng Nút radio là cách để đi.

+0

Cảm ơn câu trả lời nhưng trong khi tôi biết Radio Buttons là cách xung quanh nhưng ý tưởng mà tôi đang nghĩ là tách xác thực khỏi quá trình phát triển, vì vậy bất kỳ ai đó viết trong Lớp hoạt động xác thực của tôi nên xử lý nó mà không có vấn đề gì. Hy vọng bạn hiểu ý tôi. –

+0

Nút radio không hỗ trợ lựa chọn mutliple theo như tôi biết – aclokay

4

Logic này sẽ cho phép chọn một và hộp hơn

private Checkbox day = (checkbox)findviewbyid(R.id.day); 
private Checkbox night =(checkbox)findviewbyid(R.id.night); 

day.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (!night.isChecked() && !day.isChecked()) { 
      night.setChecked(true); 
     } 

    } 
}); 
night.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (!day.isChecked() && !night.isChecked()) { 
      day.setChecked(true); 
     } 

    } 
}); 
3

Đây là những gì tôi đã làm. Không chắc chắn nếu điều này sẽ làm việc cho bạn, nhưng cái gì đó của nó, bạn có thể sử dụng như là một khởi đầu. hộp kiểm My Tôi không cần bất kỳ trên người nghe kiểm tra, nhưng bạn có thể thêm chúng vào mỗi người nếu bạn muốn

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    private CheckBox chk1, chk2, chk3; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    chk1 = (CheckBox) findViewById(R.id.checkbox1); 
    chk2 = (CheckBox) findViewById(R.id.checkbox2); 
    chk3 = (CheckBox) findViewById(R.id.checkbox3); 
    if (chk1.isChecked()) { 
     chk1.setChecked(false); 
    } 
     else if(chk2.isChecked()){ 
      chk2.setChecked(false); 
     } 
    else { 
     chk3.setChecked(false); 
    } 
    chk1.setOnClickListener(this); 
    chk2.setOnClickListener(this); 
    chk3.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
    switch(view.getId()){ 
     case R.id.checkbox1: 
     chk1.setChecked(true); 
     chk2.setChecked(false); 
     chk3.setChecked(false); 
     break; 
     case R.id.checkbox2: 
     chk2.setChecked(true); 
     chk3.setChecked(false); 
     chk1.setChecked(false); 
     break; 
     case R.id.checkbox3: 
     chk3.setChecked(true); 
     chk2.setChecked(false); 
     chk1.setChecked(false); 
     break; 
    } 
    } 
} 
0

Cách tốt nhất để làm xác nhận vào hộp kiểm tương tự như nút radio

// Implements your activity  
CompoundButton.OnCheckedChangeListener 
// Declare global variables 
private CheckBox cbDriver, cbPickDrop; 
private String strCB; 

// Bind components and set listeners in onCreate() 
cbDriver = (CheckBox) findViewById(R.id.driverCB); 
cbPickDrop = (CheckBox) findViewById(R.id.pickDropCB); 
cbDriver.setOnCheckedChangeListener(this); 
cbPickDrop.setOnCheckedChangeListener(this); 


// write this method inside your activity 
@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    switch (buttonView.getId()){ 
     case R.id.driverCB: 
      if (isChecked) { 
       cbPickDrop.setChecked(false); 
       strCB = cbDriver.getText().toString(); 
       DialogManager.showToast(MyActivity.this, strCB); 
      } 
      break; 
     case R.id.pickDropCB: 
      if (isChecked) { 
       cbDriver.setChecked(false); 
       strCB = cbPickDrop.getText().toString(); 
       DialogManager.showToast(MyActivity.this, strCB); 
      } 
      break; 
    } 

} 
1

Mẹo khác.

Cách này có thể đăng ký người nghe một cách đơn giản.

private CheckBox[] chkBoxs; 
private Integer[] chkBoxIds = {R.id.a, R.id.b, R.id.c .....}; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    chkBoxs = new CheckBox[chkBoxIds.length]; 
    for(int i = 0; i < chkBoxIds.length; i++) { 
     chkBoxs[i] = (CheckBox) findViewById(chkBoxIds[i]); 
     chkBoxs[i].setOnCheckedChangeListener(this); 
    } 

}