web-dev-qa-db-ja.com

MaterialButtonToggleGroupで必要な単一選択

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

私はこれを以下で動作させました:

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

SingleSelectionを有効にしている場合、条件付きは、ユーザーが既にチェックされているボタンをクリックしたときにのみtrueと評価され、チェックされていないため、ボタンはチェックされません。これが発生した場合、チェックされていないボタンをチェックするだけです。

2

私もこの問題に遭遇し、これが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

私もこの問題に遭遇し、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);

お役に立てれば。

0
ank