如何在 Android 中的 RadioButton 上设置 OnClickListener?

Posted

技术标签:

【中文标题】如何在 Android 中的 RadioButton 上设置 OnClickListener?【英文标题】:How to set OnClickListener on a RadioButton in Android? 【发布时间】:2012-01-09 13:27:56 【问题描述】:

我在 RadioGroup 中有两个 RadioButtons。我想在那些RadioButtons 上设置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编程入门之二十三(常用控件:按钮控件的编程实例)

Tkinter - 只标记一个复选框

如何在Android中的特定位置绘制按钮?

android ViewPager+Fragment 如何在ViewPager的Activity中获取Fragment中的控件对象

如何在 Android 中的 TextView 中添加换行符?

如何在android中的布局内创建自定义菜单?