web-dev-qa-db-fra.com

Sélection unique requise sur MaterialButTontoggleGroup

Y a-t-il une option pour rendre le MaterialButtonToggleGroup avoir un bouton sélectionné requis lors de l'utilisation app:singleSelection="true"?

Lorsque vous cliquez sur un bouton différent fonctionne bien (tous les autres boutons sont désélectionnés), mais lorsque vous cliquez sur le bouton identique (déjà sélectionné), il le désélectionne lui-même et je tiens à rester sélectionné.

Mon exemple:

 <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>
10

J'ai eu cela fonctionnant avec ce qui suit:

toggle_group.addOnButtonCheckedListener { group, checkedId, isChecked ->
    if (group.checkedButtonId == -1) group.check(checkedId)
}

Si vous avez activé le singolleLection, le conditionnel n'évaluera que pour être true lorsque l'utilisateur a cliqué sur le bouton déjà vérifié, ce qui le rend donc sans but. Lorsque cela se produit, nous devons juste vérifier le bouton qu'ils sont décochés.

2
Steven Tchadenis

J'ai également rencontré ce problème et j'ai trouvé que cela fonctionne avec le 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();
            }
        }
    });
1
Adnan Iqbal