라디오 그룹에서 라디오 버튼을 기본값으로 설정하는 방법은 무엇입니까?


132

내가 만든 RadioGroupRadioButton동적으로 다음과 같은 :

RadioGroup radioGroup = new RadioGroup(context);
                    RadioButton radioBtn1 = new RadioButton(context);
                    RadioButton radioBtn2 = new RadioButton(context);
                    RadioButton radioBtn3 = new RadioButton(context);

                    radioBtn1.setText("Less");
                    radioBtn2.setText("Normal");
                    radioBtn3.setText("More");

                    radioBtn2.setChecked(true);

                    radioGroup.addView(radioBtn1);
                    radioGroup.addView(radioBtn2);
                    radioGroup.addView(radioBtn3);

여기서 단계 radioBtn2.setChecked(true);radioBtn2항상 확인됩니다. 즉 , radioBtn2다른 두 개의 라디오 버튼 ( radioBtn1, radioBtn3) 을 확인하여 선택을 취소 할 수 없습니다 . RadioGroup한 번에 하나의 라디오 버튼 만 확인할 수 있도록하고 싶습니다 (이제 한 번에 두 개의 라디오 버튼을 확인할 수 있음).

이 문제를 어떻게 해결할 수 있습니까?


동적으로 필요합니까 ???
vk hooda

답변:


217

다음과 같이 라디오 그룹의 라디오 버튼을 확인해야합니다.

radiogroup.check(IdOfYourButton)

물론 먼저 라디오 버튼에 ID를 설정해야합니다

편집 : 내가 잊고, radioButton.getId()작동뿐만 아니라, 들으 라 메쉬

EDIT2 :

android:checkedButton="@+id/my_radiobtn"

radiogroup xml에서 작동


39
또는 ID를 원하지 않고 RadioButton색인을 알고 있다면 ((RadioButton) radioGroup.getChildAt (INDEX)). setChecked (true);
Ahmad Kayyali

17
그렇게해서는 안됩니다. 이 질문에 설명 된 "setChecked"문제가 발생합니다. 물론 당신의 버튼의 ID없이 그것을 setChecked() 할 수있는 방법이 있지만 radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId()), 한 가지 방법 을 사용 하거나 이와 같은 것을 사용하지 마십시오
Sprigg

1
좋은 라디오 버튼 그룹의 라디오 버튼을 추가하는 것을 잊지하기 전에 group.check (button.getId ())를 호출

1
나는 이런 식으로해야 할 일을했을 : radioGroup.Check(radioGroup.GetChildAt(0).Id);Xamarin.Android 사용자를위한
마리오 갈반에게

112

XML 속성 경우 그 android:checkedButton소요 id의이 RadioButton체크된다.

<RadioGroup
...
...
android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>

50

XML 파일 android:checkedButton에서 RadioGroup의 ID를 기본값으로 사용하여 필드를 설정하십시오 RadioButton.

<RadioGroup
    ....
    android:checkedButton="@+id/button_1">

    <RadioButton
        android:id="@+id/button_1"
        ...../>

    <RadioButton
        android:id="@+id/button_2"
        ...../>

    <RadioButton
        android:id="@+id/button_3"
        ...../>
</RadioGroup>

20
    RadioGroup radioGroup = new RadioGroup(WvActivity.this);
    RadioButton radioBtn1 = new RadioButton(this);
    RadioButton radioBtn2 = new RadioButton(this);
    RadioButton radioBtn3 = new RadioButton(this);

    radioBtn1.setText("Less");
    radioBtn2.setText("Normal");
    radioBtn3.setText("More");


    radioGroup.addView(radioBtn1);
    radioGroup.addView(radioBtn2);
    radioGroup.addView(radioBtn3);

    radioGroup.check(radioBtn2.getId());

6
RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);

radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");

radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);
radioBtn2.setChecked(true);

중요한 것은 setChecked()모든 라디오 버튼이 라디오 그룹에 추가 된 후에 사용하는 것입니다 . 그런 다음, radioGroup.check(radioBtn2.getId())이 켜지지하지 않습니다
하르트 무트 Pfitzinger

3

동료의 코드에도 같은 문제가있었습니다. 라디오 그룹이 라디오 버튼으로 올바르게 설정되지 않았을 때 들립니다. 이것이 라디오 버튼을 여러 개 선택할 수있는 이유입니다. 나는 많은 것을 시도했고, 마침내 나는 실제로 잘못된 트릭을했지만 잘 작동합니다.

for ( int i = 0 ; i < myCount ; i++ )
{
    if ( i != k )
    {
        System.out.println ( "i = " + i );
        radio1[i].setChecked(false);
    }
}

여기서는 사용 가능한 라디오 버튼을 확인하고 새로 클릭 한 버튼을 제외한 모든 버튼을 선택 취소하는 for 루프를 설정했습니다. 시도 해봐.



0

RadioGroup의 버그입니다

RadioButton radioBtn2 = new RadioButton(context);

viewId가없는 radioBtn2이며 generateViewId는 onChildViewAdded ()에 있습니다.

public void onChildViewAdded(View parent, View child) {
    if (parent == RadioGroup.this && child instanceof RadioButton) {
        int id = child.getId();
        // generates an id if it's missing
        if (id == View.NO_ID) {
            id = View.generateViewId();
            child.setId(id);
        }
        ((RadioButton) child).setOnCheckedChangeWidgetListener(
                mChildOnCheckedChangeListener);
    }

    if (mOnHierarchyChangeListener != null) {
        mOnHierarchyChangeListener.onChildViewAdded(parent, child);
    }
}

따라서 먼저 radioGroup.addView (radioBtn2), 다음 radioBtn2.setChecked (true);

이처럼 :

RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);

radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");

radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);

radioBtn2.setChecked(true);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.