2012-03-28 68 views
1

對於我的特定應用,我希望能夠通過觸摸來打開和關閉單選按鈕,類似於複選框。但是,我需要這些單選按鈕在它們的組內相互排斥。有64個按鈕和8個組,所以我不想使用複選框並手動設置切換功能。我可以使用帶單選按鈕的onTouchListener()嗎?有什麼辦法可以做到這一點? 非常感謝您的支持。RadioButton-CheckBox組合

+0

按照他們的定義,RadioButtons在組內是互斥的。我不明白你在這裏問什麼。 – Squonk 2012-03-29 00:02:59

+0

我希望能夠觸摸一個單選按鈕並取消選中,類似於複選框。 – Cameron 2012-03-29 00:04:49

+0

但是,如果您使用單選按鈕組,則應始終啓用一個或其他按鈕。沒有啓用按鈕的正確方法是在該組中有一個額外的單選按鈕,稱爲「無選擇」或類似。 – Squonk 2012-03-29 00:07:15

回答

1

您正在尋找既不是複選框也不是單選按鈕的UI範例。您最好的選擇是使用複選框,然後在其上實現互斥。例如,

myCheckbox1.setOnCheckChangedListener(new OnCheckChangedListener() { 
    @Override 
    public void onCheckChanged(CompoundButton buttonView, boolean isChecked) { 
    if (isChecked) { 
     myCheckbox2.setChecked(false); 
     myCheckbox3.setChecked(false); 
     myCheckbox4.setChecked(false); 

     // start playback 
    } else { 
     // stop playback 
    } 
    } 
); 

請注意,如果你能列舉出所有每組按鈕的ID,你可以一般寫的代碼一樣,

if (isChecked) { 
     int myGroup = (Integer) buttonView.getTag(); // Define the group in the view's tag 
     for (int id: groups.get(myGroup)) { 
     if (id != buttonView.getId()) ((CompoundButton) findViewById(id)).setChecked(false); 
    } 

其他更復雜的答案將是建立你自己的UI小部件,並給它任何你想要的語義。這不是我可以在這裏描述的範圍。

+0

我非常感謝幫助,但正如我所提到的,我有64個按鈕分爲8組。手動操作會非常不方便。 – Cameron 2012-03-29 00:18:48

+0

你不必手動完成。如果你有數組中的按鈕,你可以循環關閉除了所選按鈕之外的所有按鈕。這是幾行代碼。無論如何,你不會從單選按鈕中獲得你正在尋找的東西。 – 2012-03-29 00:22:48