2013-01-08 179 views
0


我在一個活動中有16個複選框,用戶必須從中選擇8個複選框中的任何一個。
因此,最終用戶將從其中的16箇中選擇2個複選框。

更新:複選框已經存在於xml佈局文件中。因此,我確實可以訪問他們的ID

到目前爲止,我正在考慮實現一個簡單的onCheckedChange偵聽器,並在switch case塊中選擇8個複選框中的任意1個複選框,並取消選擇其中的7個複選框。但是這種方法非常痛苦。

此外,當我需要提取他們中的哪一個被選中時,它會是一個完整的混亂。

那麼,我可以做這兩件事情的最簡單但靈活的方式是什麼?建議,歡迎
感謝從多個複選框中選擇一個複選框並獲取用戶複選框

+0

使用兩組'RadioGroup',每一個都會包含8'radioButtons' – Houcine

+0

無線電集團是對於這種情況一個正確的選擇。兩組各有8個單選按鈕的無線電組將完成這項工作! – Gridtestmail

+0

@Houcine&@Gridtestmail感謝您的回覆。我正在使用複選框,並不想使用'RadioGroup'。我知道使用它的方式很簡單。但我只想堅持複選框..現在:D – beerBear

回答

3

您可以在陣列中對它們進行分組(爲方便和處理)只有一個CheckBox在一個時間(類似RadioGroup)檢查保持和還設置OnClickListener每一個設置狀態:

CheckBox[] chkArray = new CheckBox[8]; 
chkArray[0] = (CheckBox) findViewById(R.id.cb1R1); 
chkArray[0].setOnClickListener(mListener); 
chkArray[1] = (CheckBox) findViewById(R.id.cb2R1); // what id do you have? 
chkArray[1].setOnClickListener(mListener); 
// so on for the rest of the 8 CheckBoxes 

private OnClickListener mListener = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     final int checkedId = v.getId(); 
     for (int i = 0; i < chkArray.length; i++) { 
      final CheckBox current = chkArray[i]; 
      if (current.getId() == checkedId) { 
       current.setChecked(true); 
      } else { 
       current.setChecked(false); 
      } 
     }  
    } 
}; 
+1

@IntelliJAmiya使用* ... if(current.getId()== checkedId){current.setChecked(current.isChecked()); } ... *。 – Luksprog

+1

你的邏輯幫助了我。 –

0

只給他們簡單的名稱,如list1box1 list1box2 .... list2box1 list2box2 ... 有兩個數組的名字 - list1array - list2array

仍然有你的聽衆一樣,你現在要做的: 在監聽器中,首先執行if語句來檢查被單擊的項是否是list1項或list2,並基於該命令只是簡單地有一個循環遍歷該特定列表中的所有項並檢查/取消選中。

以提取只檢查哪些項目檢查的每個陣列或不

+0

感謝您的回覆。 [Here](http://pastebin.com/qubvPw2s)(PasteBin Link)是我目前的實現。你能詳細說明我的代碼嗎?我覺得你提到的第一個'if'是用來檢查一個屬於哪個'list array'的屬性可以完成的,但是** for循環遍歷了一個特定列表中的所有項目並且檢查一個盒子/取消所有其他人將不可能? – beerBear

+0

nvm我有一個答案。我以最簡單但痛苦的方式實現了它。 – beerBear

相關問題