You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Material ButtonToggleGroup获取选中按钮ID异常求助

解决ButtonToggleGroup在1.2.0-alpha06版本中checkedButtonId返回-1的问题

这个问题我之前也碰到过,是Material库1.2.0-alpha06版本的一个已知bug——当同时设置app:singleSelection="true"和app:selectionRequired="true"时,组件内部的选中状态没有被正确同步,导致调用toggleGroup.checkedButtonId会返回错误的-1值,但实际上选中状态是正常的。

下面给你两个可行的解决思路,按需选择:

1. 升级Material库版本(最推荐)

alpha版本本身就存在很多不稳定的问题,这个bug在后续的正式版本(比如1.2.0正式版及以上)已经被修复了。直接在build.gradle里把依赖版本升级:

implementation 'com.google.android.material:material:1.2.0' // 或更高稳定版本

升级后toggleGroup.checkedButtonId就能正常返回选中按钮的ID了,不需要额外写代码处理。

2. 手动维护选中状态(无法升级版本时的替代方案)

如果因为项目限制不能升级库版本,那就通过监听选中事件来手动记录每个ToggleGroup的选中ID:

  • 首先定义一个Map来存储每个ToggleGroup对应的选中按钮ID:

    private Map<MaterialButtonToggleGroup, Integer> toggleGroupCheckedIds = new HashMap<>();
    
  • 然后给每个ToggleGroup设置OnButtonCheckedListener,在回调里更新Map中的状态:

    // 假设你有两个ToggleGroup:toggleGroup1和toggleGroup2
    setupToggleGroupListener(toggleGroup1);
    setupToggleGroupListener(toggleGroup2);
    
    private void setupToggleGroupListener(MaterialButtonToggleGroup toggleGroup) {
        // 初始化时先手动获取一次选中状态(如果有默认选中的按钮)
        for (int i = 0; i < toggleGroup.getChildCount(); i++) {
            View child = toggleGroup.getChildAt(i);
            if (child instanceof MaterialButton && ((MaterialButton) child).isChecked()) {
                toggleGroupCheckedIds.put(toggleGroup, child.getId());
                break;
            }
        }
    
        // 设置选中监听
        toggleGroup.addOnButtonCheckedListener((group, checkedId, isChecked) -> {
            // 因为设置了singleSelection和selectionRequired,isChecked始终为true
            toggleGroupCheckedIds.put(group, checkedId);
        });
    }
    
  • 之后需要获取某个ToggleGroup的选中ID时,直接从Map中取:

    Integer checkedId = toggleGroupCheckedIds.get(toggleGroup1);
    if (checkedId != null) {
        // 处理选中ID
    }
    

这样就能实时准确地获取每个ToggleGroup的选中按钮ID了,避开了组件自身的bug。

内容的提问来源于stack exchange,提问作者Александр Инженер

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:32:44