1

我試圖執行一個RadioGroup中有四個的ToggleButtons。期望的行爲是典型的無線電設備組的行爲:一個按鈕被預選,如果用戶點擊另一按鈕,前一個未被選擇和新的一個,而不是選擇。如果用戶再次單擊所選按鈕,則不會發生任何事情,因爲它不允許沒有選擇任何按鈕。那就是我遇到問題的地方。我跟着要解決這個問題:Android: How to get a radiogroup with togglebuttons?radioGroup中使用的ToggleButtons不能正常工作

不幸的是,用戶仍然能夠取消激活鍵。我怎樣才能防止這一點?

繼承人我的代碼:

的onclick偵聽器的ToggleButtons:

/** 
* Handler for onClick Events. 
*/ 
    @Override 
public void onClick(View v) { 
    if (viewListener == null) { 
     return; 
    } 
    if (v == tb_one|| v == tb_two|| v == tb_three|| v == tb_four) { 
     ((RadioGroup) v.getParent()).check(v.getId()); 
    } 
    else { 
     super.onClick(v); 
    } 

} 

我定製OnCheckedChangeListener:

/** 
* The listener for a checked change event of the toggle buttons. 
*/ 
static final RadioGroup.OnCheckedChangeListener ToggleListener = new RadioGroup.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(final RadioGroup radioGroup, final int i) { 
     //if one button is checked, uncheck all others 
     for (int j = 0; j < radioGroup.getChildCount(); j++) { 
      final ToggleButton view = (ToggleButton) radioGroup.getChildAt(j); 
      view.setChecked(view.getId() == i); 
     } 
    } 
}; 

而且繼承人,我添加監聽器:(其在onFinishInflate法)

((RadioGroup) findViewById(R.id.instant_toggleGroup_mode)) 
      .setOnCheckedChangeListener(ToggleListener); 
    tb_one = (ToggleButton) findViewById(R.id.instant_tb_one); 
    tb_one.setOnClickListener(this); 
    tb_two = (ToggleButton) findViewById(R.id.instant_tb_two); 
    tb_two.setOnClickListener(this); 
    tb_three = (ToggleButton) findViewById(R.id.instant_tb_three); 
    tb_three.setOnClickListener(this); 
    tb_four = (ToggleButton) findViewById(R.id.instant_tb_four); 
    tb_four.setOnClickListener(this); 

將是巨大的,如果有人能解決指出我!

回答

2

最後我想通了,如何做到這一點。感謝Ole,你的幫助讓我看到了這個解決方案。

因此,這是工作代碼:

初始化按鈕和按鍵組:

tb_one = (ToggleButton) findViewById(R.id.instant_tb_one); 
tb_one.setOnClickListener(this); 
tb_two = (ToggleButton) findViewById(R.id.instant_tb_two); 
tb_two.setOnClickListener(this); 
tb_three = (ToggleButton) findViewById(R.id.instant_tb_three); 
tb_three.setOnClickListener(this); 
tb_four = (ToggleButton) findViewById(R.id.instant_tb_four); 
tb_four.setOnClickListener(this); 
rg_modes = (RadioGroup) findViewById(R.id.instant_toggleGroup_mode); 
rg_modes.setOnCheckedChangeListener(ToggleListener); 
rg_modes.clearCheck(); 
rg_modes.check(tb_one.getId()); 

onclick句柄:

if (v == tb_one|| v == tb_two|| v == tb_three|| v == tb_four) { 
    rg_modes.clearCheck(); 
    rg_modes.check(v.getId()); 
} 
0

您檢查,看看是否切換按鈕已被選中。如果是這樣,你什麼都不做。

if (v == tb_one|| v == tb_two|| v == tb_three|| v == tb_four) { 
    if(!((ToggleButton) v).isChecked()) 
     ((RadioGroup) v.getParent()).check(v.getId()); 
} 

編輯

if (v == tb_one|| v == tb_two|| v == tb_three|| v == tb_four) { 
    ((RadioGroup) v.getParent()).check(v.getId()); 

    if(!((ToggleButton) v).isChecked()) 
     ((ToggleButton) v).setChecked(true); 
} 
+0

感謝您的答案,但它不工作。我仍然可以取消選擇切換按鈕,現在也可以同時激活兩個按鈕。 – friday

+0

@friday我現在用正確的代碼更新了我的答案。雖然這個實現有點「哈克」。 – Ole