2012-04-12 6 views
7

チェックボックスのグループに対していくつかの種類の検証を適用しようとしています(たとえば、2つの矛盾する項目を一緒にチェックすることはできません)ので、チェックボックスオブジェクトをグループ化して全体にRequiredFieldValidatorそのバリデーターで、私はリスナーを登録し、私のチェックボックスオブジェクトの全体をチェックします。Androidチェックボックスグループ

私は何を想像すると、そのように見えるコードを次のようになります。

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

検証が矛盾したチェックボックスとすべてのロジックが含まれています。

これはAndroidのどこかに既に実装されていますか? もしそうでなければ、誰かがそれを試してみましたか? (うまくいけば私たちとここでそれを共有してください)

答えて

1

あなたはラジオボタンを使用して、それらの異なるグループを設定することができます。

This documentationおよびThis tutorialは、ラジオボタンを使用する方法がわかっている場合に役立ちます。

+0

答えてくれてありがとう、私はラジオボタンは、その周りの方法ですが、私は考えているアイデアがなければならない開発プロセスから検証を分離するので、誰かが活動に書くものは何でも私のバリデーションクラスである知っている間、問題なく処理してください。 あなたは私の言いたいことを理解していますように。 –

+0

ラジオボタンは、私が知る限り、複数の選択をサポートしていません – aclokay

4

このロジックはここに1つの、よりチェックボックス

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

} 
関連する問題