如何在 Android 中的 RadioButton 上设置 OnClickListener?
Posted
技术标签:
【中文标题】如何在 Android 中的 RadioButton 上设置 OnClickListener?【英文标题】:How to set OnClickListener on a RadioButton in Android? 【发布时间】:2012-01-09 13:27:56 【问题描述】:我在 RadioGroup
中有两个 RadioButton
s。我想在那些RadioButton
s 上设置OnClickListener
。根据单击的RadioButton
,我想更改EditText
的文本。我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:我认为更好的方法是使用 RadioGroup
并设置监听器以相应地更改和更新 View
(节省您拥有 2 个或 3 个或 4 个等监听器)。
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener()
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
// checkedId is the RadioButton selected
);
【讨论】:
对我不起作用,Eclipse 建议我添加@Override,并且已修复。谢谢 是的,我会使用 radiogroup,除非它是 xml 中的直接父级,但它不起作用,我不能将它作为直接父级,因为这个愚蠢的单选按钮无法与中心对齐,所以我不得不将它包含在线性布局 ... 您可以尝试通过将 android:gravity="center" 放在 RadioGroup 标签下的 xml 中来使单选按钮居中。 @RudolfRein 如果radiobutton是动态创建的,没有id怎么办?【参考方案2】:希望对你有所帮助...
RadioButton rb = (RadioButton) findViewById(R.id.yourFirstRadioButton);
rb.setOnClickListener(first_radio_listener);
和
OnClickListener first_radio_listener = new OnClickListener ()
public void onClick(View v)
//Your Implementaions...
;
【讨论】:
工作就像一个魅力,不要忘记在你的点击监听器的最后一个大括号之后添加一个分号 老歌但好人。接受的答案更精简,但不处理用户选择已选择的内容的情况。这处理它。遗憾的是,radiogroup 侦听器不处理“setSelected”而不考虑“更改”。【参考方案3】: radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
public void onCheckedChanged(RadioGroup group, int checkedId)
// checkedId is the RadioButton selected
RadioButton rb=(RadioButton)findViewById(checkedId);
textViewChoice.setText("You Selected " + rb.getText());
//Toast.makeText(getApplicationContext(), rb.getText(), Toast.LENGTH_SHORT).show();
);
【讨论】:
group
需要在RadioButton rb=(RadioButton)group.findViewById(checkedId);
中【参考方案4】:
问题是关于检测点击了哪个单选按钮,这就是你如何获得点击了哪个按钮
final RadioGroup radio = (RadioGroup) dialog.findViewById(R.id.radioGroup1);
radio.setOnCheckedChangeListener(new OnCheckedChangeListener()
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
View radioButton = radio.findViewById(checkedId);
int index = radio.indexOfChild(radioButton);
// Add logic here
switch (index)
case 0: // first button
Toast.makeText(getApplicationContext(), "Selected button number " + index, 500).show();
break;
case 1: // secondbutton
Toast.makeText(getApplicationContext(), "Selected button number " + index, 500).show();
break;
);
【讨论】:
【参考方案5】:您还可以从 XML 布局中添加侦听器:android:onClick="onRadioButtonClicked"
在您的 <RadioButton/>
标记中。
<RadioButton android:id="@+id/radio_pirates"
android:layout_
android:layout_
android:text="@string/pirates"
android:onClick="onRadioButtonClicked"/>
详情请见Android developer SDK- Radio Buttons。
【讨论】:
【参考方案6】:由于这个问题不是 Java 特有的,我想在 Kotlin 中添加您如何做到这一点:
radio_group_id.setOnCheckedChangeListener( radioGroup, optionId ->
when (optionId)
R.id.radio_button_1 ->
// do something when radio button 1 is selected
// add more cases here to handle other buttons in the RadioGroup
)
这里的radio_group_id
是相关无线电组的分配android:id
。要以这种方式使用它,您需要在活动的 Kotlin 文件中导入 kotlinx.android.synthetic.main.your_layout_name.*
。另请注意,如果 radioGroup
lambda 参数未使用,则可以从 Kotlin 1.1 开始将其替换为 _
(下划线)。
【讨论】:
【参考方案7】:对于 Kotlin 这里添加了 lambda 表达式并优化了代码。
radioGroup.setOnCheckedChangeListener radioGroup, optionId ->
run
when (optionId)
R.id.radioButton1 ->
// do something when radio button 1 is selected
R.id.radioButton2 ->
// do something when radio button 2 is selected
// add more cases here to handle other buttons in the your RadioGroup
希望这会对您有所帮助。谢谢!
【讨论】:
帮了我很多忙!谢谢!【参考方案8】:以防万一其他人正在为接受的答案而苦苦挣扎:
有不同的 OnCheckedChangeListener 接口。我添加到第一个以查看 CheckBox 是否已更改。
import android.widget.CompoundButton.OnCheckedChangeListener;
对
import android.widget.RadioGroup.OnCheckedChangeListener;
从 Ricky 添加 sn-p 时出现错误:
RadioGroup 类型中的方法 setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener) 不适用于参数(新 CompoundButton.OnCheckedChangeListener())
可以通过阿里的回答来解决:
new RadioGroup.OnCheckedChangeListener()
【讨论】:
【参考方案9】:RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);
radioGroup.setOnClickListener(v ->
// get selected radio button from radioGroup
int selectedId = radioGroup.getCheckedRadioButtonId();
// find the radiobutton by returned id
radioButton = findViewById(selectedId);
String slectedValue=radioButton.getText()
);
【讨论】:
请提供对此答案的解释,而不是简单地发布代码。 最后一行需要是:'String slectedValue=radioButton.getText().toString()'以上是关于如何在 Android 中的 RadioButton 上设置 OnClickListener?的主要内容,如果未能解决你的问题,请参考以下文章
(转载)VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)
android ViewPager+Fragment 如何在ViewPager的Activity中获取Fragment中的控件对象