Android布局问题:CardView中底部按钮随单选按钮重复显示
嗨,这个问题我太熟了!按钮跟着RadioButton重复显示,大概率是你把按钮的位置放错层级啦😎
问题根源
你肯定是把按钮塞进了RadioGroup里面,或者和动态生成RadioButton的代码块绑定在一起了,导致每生成一个RadioButton就顺带渲染了一次按钮。
正确的布局调整方案
把按钮放在CardView的最外层容器里,和RadioGroup同级,这样它就不会跟着RadioButton重复出现。我帮你补全并修正了你的布局代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_marginTop="10dp" android:layout_height="wrap_content"> <!-- 存放RadioButton的RadioGroup,按钮绝对不能放这里面! --> <RadioGroup android:id="@+id/radiogrp_surveyoptions" android:layout_width="wrap_content" android:layout_height="wrap_content"> <!-- 这里放你的RadioButton(静态写或动态添加都可以) --> <RadioButton android:id="@+id/option1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选项1"/> <RadioButton android:id="@+id/option2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选项2"/> </RadioGroup> <!-- 把按钮放在RadioGroup外面,和它同级!这样只会显示一次 --> <Button android:id="@+id/submit_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="提交" android:layout_marginTop="16dp"/> </LinearLayout>
额外提醒(如果是动态生成RadioButton的情况)
要是你在代码里循环往RadioGroup加RadioButton,记得按钮的初始化和添加要放在循环体外,别不小心塞进循环里了。举个Kotlin的例子:
val radioGroup = findViewById<RadioGroup>(R.id.radiogrp_surveyoptions) val options = listOf("选项1", "选项2", "选项3") // 循环只负责添加RadioButton到RadioGroup options.forEach { option -> val radioBtn = RadioButton(this) radioBtn.text = option radioGroup.addView(radioBtn) } // 按钮单独初始化,和循环完全无关 val submitBtn = findViewById<Button>(R.id.submit_btn) submitBtn.setOnClickListener { // 处理你的提交逻辑 }
如果是用RecyclerView的场景,那这个单个按钮应该放在RecyclerView的外面(比如Activity的根布局里),绝对不能放进Item布局中哦!
内容的提问来源于stack exchange,提问作者juee
相关产品推荐
相关产品推荐

