2015-10-05 142 views
0

我有6個複選框,我想例如,如果我有一個變量a = 2讓用戶檢查2複選框,並使其他禁用..如果我有一個= 3讓用戶檢查3個複選框和禁用休息等on..This是我的嘗試:禁用複選框後,檢查一定數量的複選框

public void itemClicked(View v) { 
      //code to check if this checkbox is checked! 

     CheckBox checkBox = (CheckBox)v; 

     check1=(CheckBox)findViewById(R.id.check1); 
     check2=(CheckBox)findViewById(R.id.check2); 
     check3=(CheckBox)findViewById(R.id.check3); 
     check4=(CheckBox)findViewById(R.id.check4); 
     check5=(CheckBox)findViewById(R.id.check5); 
     check6=(CheckBox)findViewById(R.id.check6); 



     if(a==1) 

     { 

      only one can be checked the others get disabled 

      } 




     } 

    } 

和XML文件的一部分:

<CheckBox android:id="@+id/check1" 
     android:layout_width="140dp" 
     android:layout_height="250dp" 
     android:scaleX="1.0" 
    android:scaleY="1.0" 
    android:button="@layout/cb_selector" 
     android:layout_marginLeft="80dp" 
     android:layout_marginTop="505dp" 
     android:onClick="itemClicked" 
     /> 



     <CheckBox android:id="@+id/check2" 
    android:layout_width="140dp" 
     android:layout_height="250dp" 
     android:scaleX="1.0" 
    android:scaleY="1.0" 
    android:button="@layout/cb_selector" 
    android:layout_marginLeft="365dp" 
     android:layout_marginTop="505dp" 
     /> 

我怎樣才能實現這一目標?

回答

2

您需要一個複選框和您在onCheckedChange中檢查變量的數組。

CheckBox[] cba;  

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    cba = new CheckBox[]{ 
      (CheckBox)findViewById(R.id.check1), 
      (CheckBox)findViewById(R.id.check2), 
      (CheckBox)findViewById(R.id.check3), 
      (CheckBox)findViewById(R.id.check4), 
      (CheckBox)findViewById(R.id.check5), 
      (CheckBox)findViewById(R.id.check6) 
    }; 
    //here set onChechedChange for all your checkboxes 
    for (CheckBox cb:cba) { 
     cb.setOnCheckedChangeListener(cbListener); 
    } 

} 

CompoundButton.OnCheckedChangeListener cbListener = new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     checkEnoughAndMakeDisabled(cba); 
    } 
}; 

private void checkEnoughAndMakeDisabled(CheckBox checkBoxes[]){ 
    int countChecked =0; 
    for (CheckBox cb:checkBoxes){ 
     cb.setEnabled(true); 
     if (cb.isChecked()) countChecked++; 
    } 
    //your variable 
    if (a <= countChecked) { 
     for (CheckBox cb:checkBoxes){ 
      if (!cb.isChecked())cb.setEnabled(false); 
     } 
    } 
} 

PS:另外我想對於這樣的問題,最好的做法是Data-Binding使用,但它是另外一個故事

+0

它給了我在onCheckedChange –

+0

的CB錯誤忘了數組來設置監聽器,見編輯答案 – Beloo

+0

血腥天才!謝啦! –