2012-04-12 69 views
7

我想在一组复选框上应用某种验证(例如,两个矛盾的项目不能一起检查),所以我想以某种方式将复选框对象分组,并在整体上应用RequiredFieldValidator之类的东西组一次,并在该验证程序中,我将注册侦听器并对我的Check Boxes对象执行整个检查。安卓复选框组

我想象会是什么,看起来像一个代码:

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

验证将包含矛盾的复选框,一切的逻辑。

在Android的某个地方已经实现了吗? 如果没有,有人试过类似的东西? (希望与我们分享)

回答

1

您可以使用单选按钮并设置它们的不同组。

This documentationThis tutorial应该会帮助你,如果你发现无线电按钮是要走的路。

+0

感谢您的回答,但同时我知道单选按钮周围的一种方式,但我正在考虑是分离的发展历程验证这个想法,所以无论有人在活动写我的验证类应处理它没有问题。 希望你明白我的意思。 – 2012-04-14 09:34:14

+0

就我所知,单选按钮不支持多选选项 – aclokay 2017-01-14 18:11:13

4

这个逻辑将允许选择一个更复选框

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

这里是我做的。不知道这是否适用于您,但您可以使用它作为开始。 我复选框,我不需要任何的检查监听器,但你可以将它们添加到每个人,如果你想要做一个类似于单选按钮,复选框,确认

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

最佳方式

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

另一个提示。

这种方式可以简单地注册侦听器。

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

}