2011-10-12 56 views
31

tôi tạo ra một RadioGroup từ XMLRadioGroup: Làm thế nào để kiểm tra theo chương trình

<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> 

Trong mã Java, tôi lập trình kiểm tra đầu tiên về việc tạo ra hoạt động (onCreate()) như sau:

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

Nhưng khi hoạt động được hiển thị, không có nút radio nào được chọn. Bất kỳ giúp đỡ?

+2

Nếu bạn muốn kiểm tra các nút radio theo lập trình thì bạn không nên chấp nhận câu trả lời đó bởi vì đó là cách chúng tôi đặt chúng được kiểm tra trên tệp xml! – arniotaki

Trả lời

41

Trong bố cục, bạn có thể thêm android:checked="true" vào CheckBox bạn muốn được chọn.

Hoặc lập trình, bạn có thể sử dụng phương pháp setChecked định nghĩa trong giao diện checkable:

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

+0

Hãy thử thêm tùy chọn đó cho cả hai cấp RadioGroup và/hoặc RadioButton, không hoạt động –

+0

bạn phải thêm tùy chọn này CHỈ vào RadioButton được chọn theo mặc định – Blackbelt

+5

Có, nó hoạt động cho RadioButton với thuộc tính đã được gán trong XML, nhưng không làm việc với mã Java (ví dụ: mOption.check (R.id.option1)); –

26

Bạn có thể cần phải khai báo các nút radio trong phương thức onCreate của mã của bạn và sử dụng chúng.

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

Đây là câu trả lời đúng – Stephen

+0

Điều này không hiệu quả đối với tôi, cũng không phải là mOption.check (R.id.option1); Tôi đã thử trong onCreate() và onResume(). Chuyện gì thế? – Rodrigo

22

thử này nếu bạn muốn nút radio của mình được kiểm tra dựa trên giá trị của một số biến, ví dụ: "genderStr", sau đó bạn có thể sử dụng đoạn mã sau

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

Đoạn mã này sẽ được đặt ở đâu? – SilverShotBee

13

Lấy nhóm radio và xem trẻ em có bị bỏ chọn không.

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

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

Tôi nghĩ rằng đã kiểm tra phải> -1 không! = - 1 – technik

7

nó sẽ làm việc nếu bạn đặt bạn vào mOption.check(R.id.option1);onAttachedToWindow phương pháp hay như thế này:

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

lý do có thể là phương pháp kiểm tra sẽ chỉ làm việc khi RadioGroup được thực sự trả lại.

10

Ngoài ra, bạn có thể sử dụng phương thức getChildAt(). Như thế này:

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

Như thường lệ, câu trả lời ít được bình chọn là câu trả lời hay nhất –

9

Xem ra! kiểm tra radio với setChecked() không thay đổi trạng thái bên trong RadioGroup. Ví dụ, phương pháp này từ radioGroup sẽ trả về kết quả sai: getCheckedRadioButtonId().

Kiểm tra RadioGroup luôn với

mOption.check(R.id.option1); 

bạn đã được cảnh báo;)

+0

Câu trả lời này phải được chấp nhận! – Devarshi

1

tôi sử dụng mảnh mã này khi làm việc với các chỉ số cho nhóm radio:

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

Câu trả lời hay nhất. Một đường thẳng. Dễ hiểu. Đối tượng đơn yêu cầu. Có thể được thêm vào một phương thức rất dễ dàng. – seekingStillness

Các vấn đề liên quan