안드로이드에서 라디오 그룹의 선택된 인덱스를 얻는 방법


213

안드로이드에서 RadioGroup의 선택된 인덱스를 얻는 쉬운 방법이 있습니까? 아니면 OnCheckedChangeListener를 사용하여 변경 사항을 듣고 마지막으로 선택한 인덱스를 보유하고있는 것이 있습니까?

XML 예 :

<RadioGroup android:id="@+id/group1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">
    <RadioButton android:id="@+id/radio1" android:text="option 1" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio2" android:text="option 2" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio3" android:text="option 3" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio4" android:text="option 4" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio5" android:text="option 5" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</RadioGroup>

사용자 option 3가 인덱스를 얻고 싶습니다를 선택 하면 2.

답변:


479

다음과 같은 작업을 수행 할 수 있어야합니다.

int radioButtonID = radioButtonGroup.getCheckedRadioButtonId();
View radioButton = radioButtonGroup.findViewById(radioButtonID);
int idx = radioButtonGroup.indexOfChild(radioButton);

RadioGroup에 다른 Views (와 같은 TextView) 가 포함되어 있으면 indexOfChild()메소드는 잘못된 색인을 반환합니다.

에서 선택된 RadioButton텍스트 를 얻으려면 RadioGroup:

 RadioButton r = (RadioButton) radioButtonGroup.getChildAt(idx);
 String selectedtext = r.getText().toString();

11
그러나 해당 버튼에 android:id속성이 설정되어 있지 않으면 어떻게해야 합니까?
neuront

@BP 부모 또는 라디오 버튼 ID가 설정되어 있지 않은 경우 라디오 버튼에 액세스하는 데 동일한 의심이 있습니다.
Killer

2
@neuront radioGroup.findViewById (radioButtonID)를 수행하는 한 작동합니다. 을 radioGroup이 세트 1, 2, 3, 4 않는 등 당신이 그것의 컨텍스트 내에서 검색 할 경우 그래서, 그것을 작동합니다 뷰의 ID를, 같은
Reinherd

기본 (및 사용자가 터치하지 않은) RadioButton이 설정되어 있으면 작동하지 않습니다.
닌자 코딩

2
@NinjaCoding 나와 같은 실수를한다면 radioButton.setChecked (true)가 아니라 radioGroup.check (selectedRadioButton.id)를 호출하여 기본 (초기) 라디오 버튼을 설정해야합니다.
Lensflare

108

이것은 작동해야합니다.

int index = myRadioGroup.indexOfChild(findViewById(myRadioGroup.getCheckedRadioButtonId()));

5
Fragment에서 사용하는 경우 getActivity (). findViewById ()를 사용하십시오.
Sanjeet A

56

라디오 그룹에 대한 참조를 가지고 getCheckedRadioButtonId ()체크 된 라디오 버튼 ID를 얻는 데 사용할 수 있습니다. 봐 여기

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radio_group);

그런 다음 선택한 라디오 옵션을 가져와야합니다.

int checkedRadioButtonId = radioGroup.getCheckedRadioButtonId();
if (checkedRadioButtonId == -1) {
    // No item selected
}
else{
    if (checkedRadioButtonId == R.id.radio_button1) {
        // Do something with the button
    }
}

예, 이것은 선택된 라디오 버튼의 ID이지만 라디오 그룹의 라디오 버튼 인덱스는 어떻습니까?
John Boker

나는 id를 얻을 수 있고 인덱스를 원한다. 그들은 다르다.
John Boker

색인이란 무엇입니까? 목록보기입니까?
Stefan Bossbaly

라디오 그룹에 5 개의 라디오 버튼이 있고 사용자가 라디오 그룹에서 선택한 라디오 버튼의 인덱스 인 2를 얻으려는 세 번째 것을 선택하면. 이것은 목록보기가 아닙니다.
John Boker

사용자가 세 번째 버튼을 선택했는지 확인하기 위해 두 번째 버튼을 얻으시겠습니까? 라디오 그룹 및 버튼에는 색인이 없습니다.
Stefan Bossbaly 2016 년

27

이 시도

        RadioGroup  group= (RadioGroup) getView().findViewById(R.id.radioGroup);
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                View radioButton = radioGroup.findViewById(i);
                int index = radioGroup.indexOfChild(radioButton);
            }
        });

이것은 작동합니다! 하지만 왜 "radioButton"보기를 사용해야하는지 이해할 수 없습니다.
AlexS



6

// 선택한 항목의 ID를 얻는 데 사용

int selectedID = myRadioGroup.getCheckedRadioButtonId();

// 선택한 항목을 봅니다.

View selectedView = (View)findViewById( selectedID);

6

이런 식으로 나를 위해 완벽하게 작동했습니다.

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radio_group);
    int radioButtonID = radioGroup.getCheckedRadioButtonId();
    RadioButton radioButton = (RadioButton) radioGroup.findViewById(radioButtonID);
    String selectedtext = (String) radioButton.getText();

5

다음과 같이 RadioButton에 값을 먼저 설정하기 만하면됩니다.

RadioButton radioButton = (RadioButton)findViewById(R.id.radioButton);      
radioButton.setId(1);        //some int value

이 spacific radioButton이 선택 될 때마다 당신이 그것을 부여한 ID로 그 값을 가져올 수 있습니다

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radioGroup);                     
int whichIndex = radioGroup.getCheckedRadioButtonId(); //of course the radioButton
                                                       //should be inside the "radioGroup"
                                                       //in the XML

건배!


5
radioSexGroup=(RadioGroup)findViewById(R.id.radioGroup);

  btnDisplay=(Button)findViewById(R.id.button);

  btnDisplay.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
        int selectedId=radioSexGroup.getCheckedRadioButtonId();
        radioSexButton=(RadioButton)findViewById(selectedId);
        Toast.makeText(MainActivity.this,radioSexButton.getText(),Toast.LENGTH_SHORT).show();
     }
  });


2

그냥 이것을 사용하십시오 :

    int index = 2;
    boolean option3Checked = radioGroup.getCheckedRadioButtonId() == radioGroup.getChildAt(2).getId();

1

넌 할 수있어

findViewById

라디오 그룹에서.

다음은 샘플입니다.

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);

1

당신은 단순히 할 수 있습니다

-onCreate 메소드에서 라디오 그룹과 라디오 버튼을 선언하십시오.

private RadioGroup GrupName;
private RadioButton NameButton;

onCreate 메소드에서 뷰 ID를 설정하십시오.

GrupName = (RadioGroup) findViewById(R.id.radioGroupid);

를 사용하여 선택한 라디오 버튼 ID를 가져옵니다

int id = GroupName.getCheckedRadioButtonId();

-ID를 사용하여 버튼 선택보기와 일치

NameButton = (RadioButton) findViewById(id);

-라디오 버튼의 값을 얻습니다

String valueExpected = NameButton.getText().toString();

--- PS : 만약 당신이 가치를 원한다면, 당신은 그것을 던질 수 있습니다

int valueExpectedIn = Integer.parseInt(valueExpected);

1

다음은 그룹에 TextView 또는 RadioButton 이외의 버튼이 포함되어 있어도 올바른 위치 를 얻는 Kotlin 확장 입니다.

fun RadioGroup.getCheckedRadioButtonPosition(): Int {
    val radioButtonId = checkedRadioButtonId
    return children.filter { it is RadioButton }
        .mapIndexed { index: Int, view: View ->
            index to view
        }.firstOrNull {
            it.second.id == radioButtonId
        }?.first ?: -1
}

0

코 틀린 :

val selectedIndex = radioButtonGroup?.indexOfChild(
  radioButtonGroup?.findViewById(
    radioButtonGroup.getCheckedRadioButtonId())
)

0
radioSexGroup = (RadioGroup) findViewById(R.id.radioSex);
btnDisplay = (Button) findViewById(R.id.btnDisplay);
btnDisplay.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // get selected radio button from radioGroup
            int selectedId = radioSexGroup.getCheckedRadioButtonId();
            // find the radiobutton by returned id
            radioSexButton = (RadioButton) findViewById(selectedId);
Toast.makeText(MainActivity.this,radioSexButton.getText(),Toast.LENGTH_SHORT).show();
        }
    });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.