[android] Android RadioGroup의 선택된 인덱스 설정

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

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



답변

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

radioGroup.check(R.id.myButtonId);

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

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

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


답변

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

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

……..

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


답변

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에 있습니다.


답변

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

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


답변

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

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


답변

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()
    }


답변