web-dev-qa-db-ja.com

RadioGroupで一度に選択できるラジオボタンを1つだけ設定する方法

ラジオグループにラジオボタンを作成しましたが、アプリを実行しようとすると、すべてのラジオボタンを常に選択できます。一度に1つのラジオボタンのみを選択できるように設定するにはどうすればよいですか?

私はFragmentを使用しています

RadioGroup radioGroup = (RadioGroup) rootView.findViewById(R.id.RGroup);
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // find which radio button is selected
                if(checkedId == R.id.Abdominal) {
                    Toast.makeText(getActivity().getApplicationContext(), "choice: A",
                            Toast.LENGTH_SHORT).show();
                } else if(checkedId == R.id.Arm) {
                    Toast.makeText(getActivity().getApplicationContext(), "choice: B",
                            Toast.LENGTH_SHORT).show();
                } else if(checkedId == R.id.Back){
                    Toast.makeText(getActivity().getApplicationContext(), "choice: C",
                            Toast.LENGTH_SHORT).show();
                } else if(checkedId == R.id.Chest){
                    Toast.makeText(getActivity().getApplicationContext(), "choice: D",
                            Toast.LENGTH_SHORT).show();
                } else if(checkedId == R.id.Leg){
                    Toast.makeText(getActivity().getApplicationContext(), "choice: E",
                            Toast.LENGTH_SHORT).show();
                } else if(checkedId == R.id.Shoulder){
                    Toast.makeText(getActivity().getApplicationContext(), "choice: F",
                            Toast.LENGTH_SHORT).show();
                }
            }

        });

ここにRGとRBの私のXMLコード

<RadioGroup
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:id="@+id/RGroup">

                    <TableRow Android:weightSum="1">
                    <RadioButton
                        Android:layout_width="wrap_content"
                        Android:layout_height="wrap_content"
                        Android:text="Abdominal"
                        Android:id="@+id/Abdominal"/>
                    <RadioButton
                        Android:layout_width="wrap_content"
                        Android:layout_height="wrap_content"
                        Android:text="Arm"
                        Android:id="@+id/Arm"/>
                    <RadioButton
                        Android:layout_width="wrap_content"
                        Android:layout_height="wrap_content"
                        Android:text="Back"
                        Android:id="@+id/Back" />
                        </TableRow>
                    <TableRow>
                        <RadioButton
                            Android:layout_width="wrap_content"
                            Android:layout_height="wrap_content"
                            Android:text="Chest"
                            Android:id="@+id/Chest"/>
                        <RadioButton
                            Android:layout_width="wrap_content"
                            Android:layout_height="wrap_content"
                            Android:text="Leg"
                            Android:id="@+id/Leg"/>
                        <RadioButton
                            Android:layout_width="wrap_content"
                            Android:layout_height="wrap_content"
                            Android:text="Shoulder"
                            Android:id="@+id/Shoulder"/>
                    </TableRow>
                </RadioGroup>

編集済み1:回答:ラジオボタンを一度に選択したくない場合は、使用しないでくださいTablerow

15
F_X

RadioGroup内のTableRowが原因で機能していません。すべてのRadioButtonは、それらの間のTableRowのためにグループ化されません。

RadioButtonはRadioGroupの直接の子である必要があります。そうでない場合、グループ化は機能しません。

このようにコードを変更するだけで動作します:

        <RadioGroup
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:id="@+id/RGroup">

            <RadioButton
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="Abdominal"
                Android:id="@+id/Abdominal"/>
            <RadioButton
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="Arm"
                Android:id="@+id/Arm"/>
            <RadioButton
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="Back"
                Android:id="@+id/Back" />                                        

            <RadioButton
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="Chest"
                Android:id="@+id/Chest"/>
            <RadioButton
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="Leg"
                Android:id="@+id/Leg"/>
            <RadioButton
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="Shoulder"
                Android:id="@+id/Shoulder"/>

        </RadioGroup>

お役に立てれば。 :)

20
Janki Gadhiya
  <RadioGroup
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"
        Android:paddingLeft="@dimen/activity_horizontal_margin"
        Android:paddingRight="@dimen/activity_horizontal_margin"
        Android:id="@+id/radioGroup">
        <RadioButton
            Android:layout_width="0dp"
            Android:layout_weight="50"
            Android:layout_height="wrap_content"
            Android:text="Debit"
            Android:id="@+id/rDebit"
            Android:checked="false"
             />

        <RadioButton
            Android:layout_width="0dp"
            Android:layout_weight="50"
            Android:layout_height="wrap_content"
            Android:text="Credit"
            Android:id="@+id/rCredit"
            Android:checked="false" />

    </RadioGroup>

そしてJavaファイル

 RadioGroup radioGroup;



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

そして、いつ何かをするとき

 if (radioGroup.getCheckedRadioButtonId() == R.id.rCredit)
{
// do something
}
5

簡単な方法。ラジオボタンのonclick。以下のようにコードを実行します。

public void clearRadioChecked() {
    rdopa.setChecked(false);
    rdopb.setChecked(false);
    rdopc.setChecked(false);
    rdopd.setChecked(false);
}

rdopaを選択する場合は、rdopaのクリック時に以下のようにします。

clearRadioChecked()
rdopa.setChecked(true);
4
Vasant

RadioGroupAndroid:checkedButton属性を使用して、最初にチェックしたいRadioButtonidを指定し、別のRadioButtonは、前の選択をクリアします。

<RadioGroup
     Android:layout_width="wrap_content"
     Android:layout_height="wrap_content"
     Android:checkedButton="@+id/rbNo"
     Android:orientation="horizontal">

        <RadioButton
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_marginEnd="50dp"
            Android:text="Yes" />

        <RadioButton
            Android:id="@+id/rbNo"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="No" />
</RadioGroup>
0
Levon Petrosyan

私はちょうど今同じ問題に直面し、間違いを犯している場所を見つけました。それを以下に説明します。

  1. RadioGroupでRadioButtonsを使用している場合、RadioButtonsはRadioGroupの直接の子である必要があります。

  2. 私は最初の条件をチェックし、それが正しいことを確認しましたが、それでもすべてのラジオボタンが選択され、IDを与えてプロジェクトを実行すると、自動的に問題が解決しました。

0
Vivek Thummar

独自のRadioGroupを作成できます。これは、直接の子かどうかに関係なく、グループにネストされているすべてのRadioButtonsを見つけることができます。 NestedRadioGroupのコードの下。 xmlファイルでRadioGroupの代わりにこれを使用すると、うまくいくはずです。

public class NestedRadioGroup extends LinearLayout {
    private SparseArray<RadioButton> radioButtons;
    private int checkedId;

    public NestedRadioGroup(Context context) {
        this(context, null);
    }

    public NestedRadioGroup(Context context, AttributeSet attrs) {
        super(context, attrs);
        radioButtons = new SparseArray<>();
        checkedId = -1;
    }

    @Override
    public void addView(View child, int index, ViewGroup.LayoutParams params) {
        super.addView(child, index, params);
        findRadioButtons(child);
    }

    private void findRadioButtons(View child) {
        if (child instanceof RadioButton) {
            RadioButton newButton = (RadioButton) child;
            newButton.setId(radioButtons.size());
            newButton.setOnCheckedChangeListener((buttonView, isChecked) -> {
                if (isChecked) {
                    if (checkedId != -1) {
                        radioButtons.get(checkedId).setChecked(false);
                    }
                    radioButtons.get(buttonView.getId()).setChecked(true);
                    checkedId = buttonView.getId();
                }
            });
            radioButtons.put(newButton.getId(), newButton);
        } else if (child instanceof ViewGroup) {
            ViewGroup group = (ViewGroup) child;

            for (int i = 0; i < group.getChildCount(); i++) {
                this.findRadioButtons(group.getChildAt(i));
            }
        }
    }
}

コードをきれいにするためのアイデアはありますか?

私はそれがあなたのためにうまくいくことを願っています:)

0
SuperSmartWorld