ラジオグループにラジオボタンを作成しましたが、アプリを実行しようとすると、すべてのラジオボタンを常に選択できます。一度に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
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>
お役に立てれば。 :)
<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
}
簡単な方法。ラジオボタンのonclick。以下のようにコードを実行します。
public void clearRadioChecked() {
rdopa.setChecked(false);
rdopb.setChecked(false);
rdopc.setChecked(false);
rdopd.setChecked(false);
}
rdopaを選択する場合は、rdopaのクリック時に以下のようにします。
clearRadioChecked()
rdopa.setChecked(true);
RadioGroupでAndroid:checkedButton
属性を使用して、最初にチェックしたいRadioButtonのid
を指定し、別の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>
私はちょうど今同じ問題に直面し、間違いを犯している場所を見つけました。それを以下に説明します。
RadioGroupでRadioButtonsを使用している場合、RadioButtonsはRadioGroupの直接の子である必要があります。
私は最初の条件をチェックし、それが正しいことを確認しましたが、それでもすべてのラジオボタンが選択され、IDを与えてプロジェクトを実行すると、自動的に問題が解決しました。
独自の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));
}
}
}
}
コードをきれいにするためのアイデアはありますか?
私はそれがあなたのためにうまくいくことを願っています:)