当前位置: 首页 > news >正文

Android - RadioGroup中多个radiobutton同时被选中问题

问题描述:

动态创建radio button, 并将多个button添加到radio group中。但是实际运行时多个radiobutton会被同时选中:

代码如下:

    mRadioGroup = findViewById(R.id.radioGroup);mDevButtons = new RadioButton[device_count];for(int i=0;i<device_count;i++) {mDevButtons[i] = new RadioButton(mContext);mDevButtons[i].setText(devices[i].getDeviceInfo());if(mCurrnetDeviceName != null && devices[i].getDeviceInfo().contains(mCurrnetDeviceName)) {mDevButtons[i].setChecked(true);}final UsbHidDevice device = devices[i];mDevButtons[i].setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mCurrnetDeviceName = device.getDeviceName();if (mCurrnetDeviceName != null) {Toast.makeText(mContext, "Selected device: " + mCurrnetDeviceName, Toast.LENGTH_SHORT).show();}}});mRadioGroup.addView(mDevButtons[i]);}

解决方法:

动态创建的radiobutton默认是没有button id的,需要主动分配button id。

mDevButtons[i].setId(View.generateViewId());

    mRadioGroup = findViewById(R.id.radioGroup);mDevButtons = new RadioButton[device_count];for(int i=0;i<device_count;i++) {mDevButtons[i] = new RadioButton(mContext);mDevButtons[i].setText(devices[i].getDeviceInfo());mDevButtons[i].setId(View.generateViewId());if(mCurrnetDeviceName != null && devices[i].getDeviceInfo().contains(mCurrnetDeviceName)) {mDevButtons[i].setChecked(true);}final UsbHidDevice device = devices[i];mDevButtons[i].setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mCurrnetDeviceName = device.getDeviceName();if (mCurrnetDeviceName != null) {Toast.makeText(mContext, "Selected device: " + mCurrnetDeviceName, Toast.LENGTH_SHORT).show();}}});mRadioGroup.addView(mDevButtons[i]);}

解决原因:

radiogoup多个button之间互斥就是通过记录button id实现的。如果radio button没有button id,radio group无法得知具体是哪个button被选中,也就无法实现多个button互斥的功能。

相关文章:

  • Vue3学习第二天记录
  • 服务部署:.NET项目使用Docker构建镜像与部署
  • TCP和udp能使用同一个端口通讯吗
  • IO-源码阅读 glibc 2.35
  • Web Dart前端:探索、挑战与未来展望
  • 针对多智能体协作框架的元编程——METAGPT
  • TCP/IP协议分析实验:通过一次下载任务抓包分析
  • 爬虫实现思路
  • 什么是Python?为什么它如此流行?
  • Activity->Activity中动态添加Fragment->add和replace方式添加的区别
  • 基于单片机的电子万年历设计
  • 11 gpio 与 pinctrl 子系统
  • TCP/IP协议介绍——三次握手四次挥手
  • C语言中指针的说明
  • 浏览器打开 three.js-r160/editor/index.html 后,为何显示白屏
  • [case10]使用RSQL实现端到端的动态查询
  • Angular 4.x 动态创建组件
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Docker下部署自己的LNMP工作环境
  • Git 使用集
  • java正则表式的使用
  • js算法-归并排序(merge_sort)
  • Logstash 参考指南(目录)
  • Meteor的表单提交:Form
  • VuePress 静态网站生成
  • 工程优化暨babel升级小记
  • 将 Measurements 和 Units 应用到物理学
  • 力扣(LeetCode)56
  • 深度学习在携程攻略社区的应用
  • 在Mac OS X上安装 Ruby运行环境
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • (003)SlickEdit Unity的补全
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (翻译)terry crowley: 写给程序员
  • (附源码)php新闻发布平台 毕业设计 141646
  • (简单) HDU 2612 Find a way,BFS。
  • (三)uboot源码分析
  • (十) 初识 Docker file
  • (十六)Flask之蓝图
  • (算法)前K大的和
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)ABI是什么
  • ***利用Ms05002溢出找“肉鸡
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .Net 路由处理厉害了
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .Net接口调试与案例
  • /var/log/cvslog 太大
  • ??eclipse的安装配置问题!??
  • @Async注解的坑,小心
  • @GetMapping和@RequestMapping的区别