2012-04-12 60 views
7

Estoy tratando de aplicar algún tipo de validación en un grupo de casillas de verificación (por ejemplo, dos elementos contradictorios no pueden verificarse juntos) así que quiero agrupar de algún modo los objetos de casilla de verificación y aplicar algo como RequiredFieldValidator en general agrupe una vez y en ese validador registraré oyentes y haré todo el control en mis objetos Casillas de verificación.Android Casilla de verificación Grupo

Lo que me imagino que será un código que parezca que:

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

Validar contendrá la lógica de casillas de verificación contradictorias y todo.

¿Ya está implementado en algún lugar de Android? Si no, ¿alguien probó algo así? (Esperemos que comparta con nosotros aquí)

Respuesta

1

Puede usar botones de opción y configurar diferentes grupos de ellos.

This documentation y This tutorial deberían ayudarlo si encuentra que los botones de radio son el camino a seguir.

+0

Gracias por la respuesta, pero mientras yo sé Radio Los botones son una forma de evitar eso, pero la idea de que estoy pensando es la separación de la validación del proceso de desarrollo, así que lo que escribo a alguien en la Actividad mi clase de validación deberán manejarlo sin ningún problema. Espero que haya entendido lo que quiero decir. –

+0

Los botones de radio no admiten selecciones mutliple por lo que sé – aclokay

4

Esta lógica permite seleccionar una casilla de verificación y más

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

Aquí es lo que hice. No estoy seguro de si esto funcionará para usted, pero es algo que podría usar como punto de partida. Mis casillas de verificación que no necesitan ningún tipo de verificación en los oyentes, pero se puede añadir a cada uno si desea

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

mejor manera de hacer la validación en casillas similares a botones de opción

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

Otro consejo.

De esta manera puede registrar oyente simplemente.

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

} 
Cuestiones relacionadas