Android RadioGroup의 선택된 인덱스 설정


95

자식 라디오 버튼을 반복하고 선택한 색인에서 라디오 버튼을 확인하는 것 외에 Android에서 RadioGroup의 선택한 색인을 설정하는 방법이 있습니까?

참고 : 런타임에 라디오 버튼 그룹을 채우고 있습니다.

답변:


202

라디오 그룹이 레이아웃 xml 파일에 정의 된 경우 각 버튼에 ID를 할당 할 수 있습니다. 그런 다음이 버튼을 확인하면

radioGroup.check(R.id.myButtonId);

프로그래밍 방식으로 라디오 그룹을 만든 경우 (어떻게하는지 모르겠습니다 ...) 라디오 그룹 전용 특수 레이아웃 xml 파일을 만들어 R.id. * ID를 할당 할 수 있습니다. 버튼에.

실제로 라디오 버튼 그룹을 색인별로 설정하려는 경우 아래 답변을 참조하십시오. 아래 답변을 참조하십시오.

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

2
안녕하세요, 다음 코드를 사용하여 프로그래밍 방식으로 만들었습니다 .for (int i = 0; i <lookupTypes.size (); i ++) {// RadioButton rbt = new RadioButton (this); //, null, // R.style. RadioGroupItem); RadioButton rbt = (RadioButton) getLayoutInflater (). inflate (R.layout.tmpltradiobutton, null); rbt.setId (i); rbt.setText (lookupTypes.get (i) .getValue ()); rbt.setTag (lookupTypes.get (i)); rbtnGroup.addView (rbt); }
하산 Mokdad

lookupTypes의 인덱스에 해당 ID를 설정하고 있으므로 해당 인덱스를 check메서드에 대한 인수로 사용할 수 있습니다 .
jjm

이 답변은 질문자가 이미 말한 내용을 문자 그대로 다시 설명합니다. 다른 답변은 색인별로 선택하는 방법을 올바르게 알려주기 때문에 수락 된 답변이어야합니다.
Lassi Kinnunen

@LassiKinnunen 나는이 답변에 대한 찬성 수는 사람들이 필요한 것을 얻고 있음을 시사하는 것처럼 느낍니다 ... 즉, 질문에 대해 다른 답변이 더 정확하다는 것이 옳습니다 :-/
jjm

2
솔직히 이것이 내가 가장 많이 득표 한 SO 답변이라는 것이 조금 당황 스럽습니다.
jjm

86

질문에 "선택한 INDEX 설정"이라는 질문이 있습니다. 색인별로 설정하는 방법은 다음과 같습니다.

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

........

추가 정보 : Google에서 색인 대신 ID를 사용하기를 원하는 것 같습니다. 예를 들어 RadioGroup에 다른 UI 요소가 있거나 다른 개발자가 RadioButton을 다시 정렬하는 경우 인덱스가 변경 될 수 있으며 예상 한 것과 다를 수 있습니다. 그러나 당신이 유일한 개발자라면 이것은 완전히 괜찮습니다.


이 코드에 대해 설명해 주시겠습니까? 정답은 무엇입니까?
rfornal

1
@rfornal이 코드를 사용하면 View id (예 : R.id.radioButton1)가 아닌 INDEX로 라디오 버튼을 잡을 수 있으며 인덱스를 뷰 ID로 변환하기 위해 조회 테이블을 구현할 필요가 줄어 듭니다.
Siavash

5

Siavash의 대답은 정확합니다.

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

그러나 radioGroup은 각 선택 항목 아래에 희미한 선을 포함하는이 예제와 같이 radioButtons 이외의보기를 포함 할 수 있습니다.

<RadioGroup
    android:id="@+id/radioKb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RadioButton
        android:id="@+id/kb1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - ABC" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - Qwerty" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Standard softkey" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Physical keyboard" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

</RadioGroup>

예를 들어이 경우 인덱스 1을 사용하면 오류가 발생합니다. 인덱스 1의 항목은 radioButton이 아닌 첫 번째 구분선입니다. 이 예제의 radioButtons는 인덱스 0, 2, 4, 6에 있습니다.


3

라디오 그룹에서 findViewById를 할 수 있습니다.

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

1

이것은 나를 위해 일했습니다. 라디오 버튼을 동적으로 만들었습니다.

  private void createRadioButton() {

    RadioButton[] rb = new RadioButton[5];

    RadioGroup.LayoutParams layoutParams = new RadioGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            1.0f);

    radioGroup.setOrientation(RadioGroup.HORIZONTAL);

    for (int ID = 0; ID < 5; ID++) {
        rb[ID] = new RadioButton(this);
        rb[ID].setLayoutParams(layoutParams);
        rb[ID].setText("Button_Text");
        radioGroup.addView(rb[ID]); //the RadioButtons are added to the radioGroup instead of the layout
    }
}

이제 버튼을 사용하여 확인하십시오.

int radio_button_Id = radioGroup.getChildAt(index).getId();

radioGroup.check( radio_button_Id );

0

onBindViewHolder 내부에서 태그를 버튼 그룹으로 설정합니다.

@Override
public void onBindViewHolder(final CustomViewHolder holder, final int position) {
   ...
   holder.ButtonGroup.setTag(position);
}

그리고 ViewHolder에서

ButtonGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        ...
        int id = radioGroup.getCheckedRadioButtonId();

        RadioButton radioButton = (RadioButton) radioGroup.findViewById(id);

        int clickedPos = (Integer) radioGroup.getTag();

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