使用MaterialButtonToggleGroup
时是否可以使app:singleSelection="true"
处于必需的选定按钮的选项?
单击其他按钮时效果很好(取消了所有其他按钮的选择),但是单击同一按钮(已选择)时,它本身取消了选择,而我希望保持选中状态。
我的例子:
<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>
答案 0 :(得分:1)
我也遇到了这个问题,发现它正在与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 :(得分:1)
我通过以下方法进行工作:
toggle_group.addOnButtonCheckedListener { group, checkedId, isChecked ->
if (group.checkedButtonId == -1) group.check(checkedId)
}
如果启用了singleSelection,则只有当用户单击已选中的按钮时,条件才会评估为true,从而不会选中任何按钮。发生这种情况时,我们只需要选中未选中的按钮即可。
答案 2 :(得分:0)
我也遇到了这个问题,将等待Google的永久修复。同时,我进行了以下操作以确保至少选中了一个按钮。
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);
希望这会有所帮助。
答案 3 :(得分:0)
您可以使用 app:selectionRequired
属性在布局中对其进行定义:
<com.google.android.material.button.MaterialButtonToggleGroup
app:selectionRequired="true"
app:checkedButton="@id/..."
app:singleSelection="true">
您还可以使用方法 setSelectionRequired
:
buttonGroup.setSelectionRequired(true);
注意:这要求最低版本为 1.2.0-alpha03