app:singleSelection="true"
を使用するときにMaterialButtonToggleGroup
に必要な選択ボタンを作成するオプションはありますか?
別のボタンをクリックすると問題なく動作しますが(他のすべてのボタンは選択解除されています)、同じ(すでに選択されている)ボタンをクリックすると、それ自体が選択解除され、選択したままにしておきたいのです。
私の例:
<com.google.Android.material.button.MaterialButtonToggleGroup
Android:layout_width="wrap"
Android:layout_height="wrap_content"
app:singleSelection="true">
<com.google.Android.material.button.MaterialButton
Android:id="@+id/filterA"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="A"/>
<com.google.Android.material.button.MaterialButton
Android:id="@+id/filterB"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="B"/>
<com.google.Android.material.button.MaterialButton
Android:id="@+id/filterC"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="C"/>
</com.google.Android.material.button.MaterialButtonToggleGroup>
私はこれを以下で動作させました:
toggle_group.addOnButtonCheckedListener { group, checkedId, isChecked ->
if (group.checkedButtonId == -1) group.check(checkedId)
}
SingleSelectionを有効にしている場合、条件付きは、ユーザーが既にチェックされているボタンをクリックしたときにのみtrueと評価され、チェックされていないため、ボタンはチェックされません。これが発生した場合、チェックされていないボタンをチェックするだけです。
私もこの問題に遭遇し、これがapp:singleSelection="true"
String selectedValue = "Male";
genderBtnToggle.addOnButtonCheckedListener(new MaterialButtonToggleGroup.OnButtonCheckedListener() {
@Override
public void onButtonChecked(MaterialButtonToggleGroup group, int checkedId, boolean isChecked) {
MaterialButton btn = genderBtnToggle.findViewById(checkedId);
if (!isChecked && btn.getText().toString().equals(selectedValue)) {
genderBtnToggle.check(checkedId);
}
if (isChecked) {
selectedValue = btn.getText().toString();
}
}
});
私もこの問題に遭遇し、Googleからの恒久的な修正を待っています。それまでの間、少なくとも1つのボタンがオンになっていることを確認するために、次のことを行いました。
final MaterialButtonToggleGroup tGroup = view.findViewById(R.id.toggleGroup);
final MaterialButton breast = tGroup.findViewById(R.id.breast);
final MaterialButton bottle = tGroup.findViewById(R.id.bottle);
final MaterialButton solids = tGroup.findViewById(R.id.solids);
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
tGroup.check(v.getId());
}
};
breast.setOnClickListener(onClickListener);
bottle.setOnClickListener(onClickListener);
solids.setOnClickListener(onClickListener);
お役に立てれば。