2012-04-12 67 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); 
    } 

}