web-dev-qa-db-ja.com

Android RadioGroupの選択されたインデックスを設定します

子ラジオボタンをループして選択したインデックスでラジオボタンをチェックすることを選択する以外に、AndroidでRadioGroupの選択したインデックスを設定する方法はありますか?

注:実行時にラジオボタングループにデータを入力しています。

81
Hassan Mokdad

ラジオグループがレイアウトxmlファイルで定義されている場合、各ボタンにIDを割り当てることができます。次に、このようなボタンをチェックするだけです

radioGroup.check(R.id.myButtonId);

ラジオグループをプログラムで作成した場合(これをどのように行うかわからない...)、R.id. * idを割り当てることができるように、ラジオグループ専用の特別なレイアウトxmlファイルを作成することを検討できます。ボタンに。

実際、インデックスでラジオボタングループを設定する場合は、以下の回答をご覧ください。下記の回答をご覧ください。

180
jjm

質問は「選択されたインデックスを設定」と言いましたが、インデックスで設定する方法は次のとおりです。

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

........

追加情報:Googleは、インデックスの代わりにidを使用することを望んでいるようです。これは、idを使用する方がバグが少ないためです。たとえば、RadioGroupに別のUI要素がある場合、または別の開発者がRadioButtonsを並べ替える場合、インデックスは変更される可能性があり、予期したものではない可能性があります。しかし、あなたが唯一の開発者であれば、これはまったく問題ありません。

85
Siavash

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にあります。

5
Alan

ラジオグループからfindViewByIdを実行できます。

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

これでうまくいきました。ラジオボタンを動的に作成しました。

  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 );
1
Mukeshkumar S

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()
    }
0
Jiten Basnet