2011-10-12 52 views
31

我創建XMLRadioGroup中:如何以編程方式檢查

<RadioGroup android:id="@+id/option" 
     android:layout_width="match_parent" 
     android:orientation="horizontal" 
     android:checkedButton="@+id/block_scenario_off" 
     android:layout_height="wrap_content"> 
     <RadioButton 
      android:layout_width="0dip" 
      android:layout_weight="1" 
      android:text="@string/option1" 
      android:layout_height="wrap_content" 
      android:id="@+id/option1" 
      android:layout_gravity="center|left" 
      android:onClick="@string/on_click"/> 
     <RadioButton 
      android:layout_width="0dip" 
      android:layout_weight="1" 
      android:text="@string/option2" 
      android:onClick="@string/on_click" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:id="@+id/option2"/> 
     <RadioButton 
      android:layout_width="0dip" 
      android:layout_weight="1" 
      android:text="@string/option3" 
      android:onClick="@string/on_click" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center|right" 
      android:id="@+id/option3" /> 
    </RadioGroup> 

在Java代碼中RadioGroup中,我以編程方式檢查如下的活動創造(的onCreate())的第一個:

mOption = (RadioGroup) findViewById(R.id.option); 
    mOption.check(R.id.option1); 

但是當活動顯示時,沒有單選按鈕被選中。任何幫助?

+2

如果你想以編程方式檢查單選按鈕,那麼您不應該接受該答案,因爲這是我們如何將它們設置爲在xml文件上進行檢查! – arniotaki

回答

41

在您的佈局中,您可以將android:checked="true"添加到要選擇的CheckBox

或以編程方式,可以使用在可檢查的接口中定義的方法setChecked:

RadioButton b = (RadioButton) findViewById(R.id.option1); b.setChecked(true);

+0

嘗試將該選項添加到RadioGroup和/或RadioButton級別,不起作用 –

+0

您必須將此選項僅添加到默認情況下選中的RadioButton – Blackbelt

+5

是的,它適用於具有以XML格式分配的checked屬性的RadioButton,但它不使用Java代碼(即mOption.check(R.id.option1)); –

26

您可能需要聲明的單選按鈕,在你的代碼的onCreate方法和使用它們。

RadioButton rb1 = (RadioButton) findViewById(R.id.option1); 
rb1.setChecked(true); 
+0

這是正確的答案 – Stephen

+0

這不適用於我,也不適用於mOption.check(R.id.option1);我嘗試過onCreate()和onResume()。哪裏不對? – Rodrigo

22

試試這個 如果你希望你的單選按鈕,基於一些變量如價值進行檢查「genderStr」那麼你可以用下面的代碼片段

if(genderStr.equals("Male")) 
     genderRG.check(R.id.maleRB); 
    else 
     genderRG.check(R.id.femaleRB); 
+0

這個代碼片段放在哪裏? – SilverShotBee

13

抓住無線電集團和看孩子,看是否有未被選中。

RadioGroup rg = (RadioGroup) view; 
int checked = savedInstanceState.getInt(wrap.getAttributeName()); 

if(checked != -1) { 
    RadioButton btn = (RadioButton) rg.getChildAt(checked); 
    btn.toggle(); 
} 
+0

我認爲必須> -1不是!= - 1 – technik

7

,如果你把你的mOption.check(R.id.option1);onAttachedToWindow方法或這樣它會工作:

view.post(new Runnable() 
{ 
    public void run() 
    { 
     // TODO Auto-generated method stub 
     mOption.check(R.id.option1); 
    } 
}); 

其原因可能是當RadioGroup中實際呈現該檢查方法纔有效。

10

你也可以使用getChildAt()方法。像這樣:

mOption = (RadioGroup) findViewById(R.id.option); 
((RadioButton)mOption.getChildAt(0)).setChecked(true); 
+2

像往常一樣,較少的投票答案是最好的一個 –

9

小心!用setChecked()檢查單選按鈕不會改變RadioGroup內的狀態。例如,radioGroup中的這種方法將返回錯誤的結果:getCheckedRadioButtonId()

檢查radioGroup中總是

mOption.check(R.id.option1); 

你已經被警告;)

+0

這個答案應該被接受答案! – Devarshi

1

我用這個代碼塊與無線電索引組工作時:

radioGroup.check(radioGroup.getChildAt(index).getId()); 
+0

最佳答案。一條線。容易明白。需要單個對象。可以很容易地添加到方法中。 – seekingStillness

相關問題