2012-04-12 19 views
7

Sto provando ad applicare un qualche tipo di convalida su un gruppo di caselle di controllo (ad esempio Due elementi contraddittori non possono essere controllati insieme) quindi voglio in qualche modo raggruppare oggetti Check Box e applicare qualcosa come RequiredFieldValidator sull'intero raggruppa una volta e in quel validatore registrerò gli ascoltatori e eseguirò l'intero controllo sugli oggetti Check Boxes.Gruppo di controllo Android Gruppo

quello che immagino sarebbe un codice che sembra che:

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

Convalida conterrà la logica di caselle di controllo contraddittorie e tutto.

È già implementato da qualche parte in Android? Se no, qualcuno ha provato qualcosa del genere? (Speriamo di condividerlo con noi qui)

risposta

1

È possibile utilizzare i pulsanti di opzione e impostare diversi gruppi di essi.

This documentation e This tutorial dovrebbero aiutare se si scopre che i pulsanti di scelta sono la strada da percorrere.

+0

Grazie per la risposta, ma mentre so pulsanti di scelta sono un modo per aggirare questo, ma l'idea che sto pensando è che separa la convalida del processo di sviluppo, in modo da qualunque qualcuno scrivo nella mia classe di attività di convalida gestirlo senza problemi. Spero tu abbia capito cosa intendo. –

+0

I pulsanti di opzione non supportano le selezioni multiple per quanto ne so – aclokay

4

Questa logica permetterà di selezionare una casella di controllo e più

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

Ecco quello che ho fatto. Non sono sicuro se questo funzionerà per te, ma è qualcosa che potresti usare come inizio. mie caselle di controllo che non hanno bisogno di alcuna sugli ascoltatori di controllo, ma si potrebbe aggiungere a ciascuno se vuoi

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

modo migliore per farlo convalida caselle di controllo simili a pulsanti di opzione

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

Un altro consiglio.

In questo modo è possibile registrare semplicemente ascoltatore.

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

} 
Problemi correlati